java - 匿名内部类: declared as instance variables vs creating on the fly

标签 java anonymous-class anonymous-inner-class

我正在重构一个具有面向公众的接口(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/

相关文章:

java - 实现 Thrift API 时出错

Java 字符串初始化和默认值

java - 无法在 Java 中访问匿名类方法

java - 测试匿名类实例中的方法是否被调用

java - 获取所有字符串字段的值

java - 递归获取幂集

c# - LINQ left join + default if empty + 匿名类型 + group by

java - 局部内部类是否在定义它们的范围内维护所有局部变量的副本?

java - 可运行内联类声明 - 能够访问外部非最终变量

android - 我是否需要注销 'anonymous' BroadcastReceiver