Runnable接口和相关对象

时间:2014-03-17 05:19:46

标签: java

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

我是java的新手,我读到了这个代码区,并想知道我们何时需要这样的更新程序或实现Runnable接口的类。 要调用该更新程序,他们会这样做

handler = new Handler();
handler.post(updater); 

我不明白这个的基本逻辑。

1 个答案:

答案 0 :(得分:0)

我不了解其余的背景,但通过这种方式,您可以选择不同的行为"在您的对象Handler中。由于我不知道您看到此示例的代码的上下文,我将尝试使用不同的类和方法来解释它:

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

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

这种情况非常普遍,在Java 8中,您将能够以这种方式编写您发布的代码:

public Runnable updater = () -> { obj.notifyDataSetChanged(); }

这不那么冗长。