2017-08-14 56 views
0

所以我有一个环型的类别,基本上是如下:Android/Java:有没有办法存储一个方法?

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; 
    } 
} 

我想知道的是,是否有可能存储方法。例如,类可以看起来像这样。

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; 
    } 
} 

是这样的可能吗?

+0

尝试[this](https://docs.oracle.com/javase/tutorial/reflect/member/methodInvocation.html)使用反射调用方法。 – zombie

+0

你要么想反射或Java 8的功能,我不知道哪个。 – bcsb1001

回答

4

我假设你想在Java 6中使用这个功能,所以你可以使用interfaceanonymous class

接口代码:

public interface Listener { 
    void callMethod(); 
} 

你的主题:

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; 
    } 
} 

设置监听器:

Loop loop = new Loop(); 

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

这将工作FO你的用例。如果要保存方法并将方法作为数据传递,则必须使用Java 8(在所有Android API级别上不支持)或Kotlin。

+0

工作完美,谢谢。 – Ryan

相关问题