2017-11-10 3 views
2

Ich habe eine Schnittstelle, die eine Funktion hat, wie unten dargestellt:Schleife auf Funktion bei der Erstellung eines Objekts Java

public interface Myinterface { 
    Myobj1 getobjdata(int var1, int var2) throws IOException, SocketTimeoutException; 
} 


Myinterface mi = new Myinterface() { 
    @Override 
    public Myobj1 getobjdata(int x, int y) throws IOException, SocketTimeoutException { 
     return c.getobjdata(x, y); //c is another class 
    } 
}; 

In MyInterface mi Ich frage mich, wie kann ich auf dieser überschriebenen Funktion Schleife so kann ich die mi füllen mit alle ihm entsprechenden Objekte, die x von 0 bis 10 und dasselbe mit y haben? Zum Beispiel, wo ich die for-Schleife platzieren kann, wo mi mit 100 Objektdaten gefüllt wird.

Ich habe die unten versucht, aber es gibt eine Fehlermeldung, „return-Anweisung fehlt, nicht sicher, warum?

Myinterface mi = new Myinterface() { 
    @Override 
    public Myobj1 getobjdata(int x, int y) throws IOException, SocketTimeoutException { 
for (int i = 0; i < 10; i++) { 
        for (int j = 0; j < 10; j++) { 
      return c.getobjdata(x, y); //c is another class 

        } 
       } 
      } 

     }; 

UPDATE

nach der vorgeschlagenen Antwort, die ich es versucht, aber dann habe ich hinzufügen eine print-Anweisung, aber es wird nie aufgerufen, was bedeutet, dass der Code innerhalb der Funktion nie ausgeführt wird, nicht sicher, warum?

+0

meinst du nicht, es ist eine Art von Zyklus in getobjdata Methode. – shivam

+0

können Sie bitte die Definition von "Myclass" Interface posten. – shivam

+0

@shivam hat die Fragen bearbeitet, tut mir leid, es ist eine Schnittstelle, keine Klasse. –

Antwort

0

Sie müssen dies versuchen, um "fehlende Return-Anweisung" zu vermeiden.

Myinterface mi = new Myinterface() { 
    @Override 
    public Myobj1 getobjdata(int x, int y) throws IOException, SocketTimeoutException { 
     for (int i = 0; i < 10; i++) { 
        for (int j = 0; j < 10; j++) { 
          return getobjdata(i, j); 
        } 
      } 
      return null; 
     } 
    }; 
    int dummy1 = 1, dummy2 =2; 
    mi.getobjdata(dummy1,dummy2); // now it will come into "getobjdata" function 

Wie ich bereits vorgeschlagen habe, erhalten Sie Stack-Overflow-Ausnahme, da es eine Art zyklische Methodenaufruf ist.

+0

Ich habe das gemacht und einen Druck "test" direkt vor der for-Schleife hinzugefügt, aber es tritt nie diese getobjdata-Funktion, warum? –

+0

@Shepherd gleich danach müssen Sie diese Funktion aufrufen, dann wird es nur ausgeführt und alles, was Sie getan haben, ist nur eine Objektdeklaration, Erstellung und Initialisierung. – shivam

+0

Sie hatten diese Funktion bisher nicht aufgerufen, deshalb kommt sie nicht. – shivam

0

Von dem, was ich von Ihrem obigen Code sehen kann, scheint es nur, dass Sie die Methode getobjdata() auf dem mi Feld überhaupt nicht aufrufen. Nur das mi Feld in einer Klasse mit der getobjdata() zu deklarieren reicht nicht aus. Sie müssen es auch von woanders aus anrufen. Sie müssen Ihren Code finden, der tatsächlich ausgeführt wird und sicher sein, von dort aus mi.getobjdata(x,y) aufzurufen.

Verwandte Themen