2017-08-14 5 views
0

So habe ich eine Schleife-Klasse, die im Grunde ist wie folgt:Android/Java: Gibt es eine Möglichkeit, eine Methode zu speichern?

public class Loop extends Thread { 
    private boolean running; 

    public Loop() { 
     running = false; 
    } 

    public void run() { 
     while(running) { 
      //Do stuff 
     } 
    } 

    public void setRunning(boolean b) { 
     running = b; 
    } 
} 

Was ich würde gerne wissen, ist, ob es möglich ist, Methoden zu speichern. Zum Beispiel könnte die Klasse stattdessen so aussehen.

public class Loop extends Thread { 
    private boolean running; 
    private Method method; 

    public Loop() { 
     running = false; 
    } 

    public void run() { 
     while(running) { 
      if(method != null) 
       method.callMethod(); 
     } 
    } 

    public void setRunning(boolean b) { 
     running = b; 
    } 

    public void setMethod(Method m) { 
     method = m; 
    } 
} 

Ist so etwas möglich?

+0

versuchen Sie [this] (https://docs.oracle.com/javase/tutorial/reflect/member/methodInvocation.html), eine Methode mit Reflektion aufzurufen. – zombie

+0

Sie wollen entweder Reflexion oder Java 8 Funktionen, ich kann nicht sagen, welche. – bcsb1001

Antwort

4

Ich nehme an, dass Sie diese Funktionalität in Java 6 möchten, so können Sie interface und anonymous class verwenden.

Interface-Code:

public interface Listener { 
    void callMethod(); 
} 

Ihr Thema:

public class Loop extends Thread { 
    private boolean running; 
    private Listener listener; 

    public Loop() { 
     running = false; 
    } 

    public void run() { 
     while(running) { 
      if(listener != null) 
       listener.callMethod(); 
     } 
    } 

    public void setRunning(boolean b) { 
     running = b; 
    } 

    public void setListener(Listener listener) { 
     this.listener = listener; 
    } 
} 

Set Zuhörer:

Loop loop = new Loop(); 

loop.setListener(new Listener() { 
    @Override 
    public void callMethod() { 
    // Do stuff 
    } 
}); 

Dies funktioniert fo R Ihr Anwendungsfall. Wenn Sie Methoden speichern und Methoden als Daten übergeben möchten, müssen Sie entweder Java 8 (nicht auf allen Android-API-Ebenen unterstützt) oder Kotlin verwenden.

+0

Arbeitete perfekt, danke. – Ryan

Verwandte Themen