Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 可运行接口和相关对象_Java - Fatal编程技术网

Java 可运行接口和相关对象

Java 可运行接口和相关对象,java,Java,我是java新手,我读过代码剪贴,想知道什么时候我们需要这样一个更新程序或者一个实现Runnable接口的类。 要调用更新程序,他们会这样做 public Runnable updater = new Runnable() { @Override public void run() { obj.notifyDataSetChanged(); } }; 我不明白这背后的逻辑 我不知道上下文的其余部分,但通过

我是java新手,我读过代码剪贴,想知道什么时候我们需要这样一个更新程序或者一个实现Runnable接口的类。 要调用更新程序,他们会这样做

public Runnable updater = new Runnable() 
    {   
        @Override
        public void run() {
         obj.notifyDataSetChanged();
        }
    };

我不明白这背后的逻辑

我不知道上下文的其余部分,但通过这种方式,您可以在对象
处理程序中选择不同的“行为”。由于我不知道您看到这个示例的代码的上下文,我将尝试用不同的类和方法来解释它:

例如,如果您希望能够在同一段代码中执行不同的行为,那么您可以创建新的行为或从现有行为中进行选择,您可以:

handler = new Handler();
handler.post(updater); 
这种情况非常常见,因此在Java 8中,您可以通过以下方式编写发布的代码:

class Operation {

    Runnable operation = null;

    private int result;
    private int op1;
    private int op2;

    public Example(int op1, int op2) {
        this.op1 = op1;
        this.op2 = op2;
    }

    // ... more code ...

    Runnable sum = new Runnable() {
        public void run() { result = op1 + op2; }
    }

    Runnable minus = new Runnable() {
        public void run() { result = op1 - op2; }
    }

    // ... more code ...

    public void selectBehaviour(String behaviourName) {

        // ... more code ...

        // select behaviour
        if("SUM".equals(behaviourName)) {
            operation = sum;
        } else if("MINUS".equals(behaviourName)) {
            operation = minus;
        } else {
            // ... more code ...
        }

    }

    public void perform() {
        operation.run();
    }

    int getResult() {
        return result;
    }
}

这就不那么冗长了。

我猜
处理程序
实例有一个队列,我们可以通过调用
post
方法来排列
Runnable
实例。然后,
处理程序
可以有一个专用的
线程
,它从队列中获取
可运行的
实例,并调用
可运行的.run()
public Runnable updater = () -> { obj.notifyDataSetChanged(); }