我正在重构一个具有面向公众的接口(interface)的类,考虑其用法让我问:
在一些较大的类中声明以下内容(作为实例变量)有什么区别:
private final OnClickListener mButtonOnClickListener = new OnClickListener() {
@Override
public void onClick(View view) {
//some codes
}
};
与如下声明为匿名内部类(即时):
private void someFunctionInClass() {
someOtherFunctionThatTakesAnOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
//some codes
}
});
}
更具体地说,前者是否仍被视为匿名内部类?我读到this answer一个匿名内部类
is one that is created AND defined within the body of another class' method
我给出的第一个示例是在另一个类的主体中创建和定义的,但不像第二个示例那样在另一个类的方法中创建和定义。仍然是匿名内部类吗?此外,对于彼此而言,可接受的做法是什么?声明(我认为仍然是)匿名内部类作为实例变量是否更有效,因为不需要重新创建新对象?
最佳答案
这两个都是匿名类。除了范围之外,没有太大区别。但下面是一个链接,可用于决定使用哪个 本地类: 匿名类: 嵌套类: lambda 表达式: http://docs.oracle.com/javase/tutorial/java/javaOO/whentouse.html
希望对您有所帮助。
关于java - 匿名内部类: declared as instance variables vs creating on the fly,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15557088/