组织回调的首选方式是什么?

Ale*_*ohn 5 java lambda coding-style anonymous-class private-class

在我的Android项目中,我定义了一些回调来对按钮单击,连接事件或UI事件(例如Dilaog.onShow())进行操作。出于演示目的,我选择了必须从一些Activity代码启动的Runnable接口。使用Java,我有不同的表达方式。

一种模式是使用匿名类

runOnUiThread(new Runnable() { 
    public void run() { 
        doSomething(); 
    }
});

private void doSomething() {
}
Run Code Online (Sandbox Code Playgroud)

另一个-定义内部私有类,即

private DoSomething implements Runnable {
    public void run() { 
        // do something; 
    }
}
...
runOnUiThread(new DoSomething());
Run Code Online (Sandbox Code Playgroud)

还有一个-使用私有成员,例如:

private final Runnable doSomething = new Runnable() {
    public void run() { 
        // do something; 
    }
}
...
runOnUiThread(doSomething);
Run Code Online (Sandbox Code Playgroud)

这是我最喜欢的另一个,因为一方面,除非有人真正使用它,否则它实际上不会构造对象;因为它避免了多余的类,因为它可以在需要时使用参数。

private Runnable doSomething() { 
    return new Runnable() {
        public void run() { 
            // do something; 
        }
    }
}
...
runOnUiThread(doSomething());
Run Code Online (Sandbox Code Playgroud)

我不是在寻找关于品味或宗教信仰的争论,而是在寻找代码的可维护性和性能。我想收到一些提示和建议,这些建议可以帮助我发展自己的偏爱,可能-根据给定的情况选择不同的偏爱。

扰流板:

Java的进步使这个问题过时了,​​请参见已接受的答案。

Ale*_*ohn 0

如今,当 Java 8 几乎可用于 Android 时,Android Studio会自动假装已经支持 lambda,匿名类 (#1) 解决方案似乎是显而易见的选择:

崩溃了

扩大