分享
三行代码  ›  专栏  ›  技术社区  ›  Azianese

如果方法返回匿名类,它返回的是子类还是内部类? - If a method returns an anonymous class, is it returning a subclass or an inner class?

  •  0
  • Azianese  · 技术社区  · 1 周前

    也许没什么区别,但我还是想知道。我想知道返回一个匿名类的含义,例如:

    public class Module extends BaseModule {
    
        private BaseInitializable initializeModule() {
            return new BaseInitializable() {
                public void initialize(InitializationContext context) {
                    helperA.initialize();
                    helperB.initialize();
                    s_logger.log(LogLevel.INFO,"something");
                }
    
                public void shutdown(InitializationContext context) {
                }
            };
        }
    }
    

    Post 1

    Post 2

    基于post 1,代码似乎返回了一个匿名的内部类。但这是否违背了内部类的原则,因为它们只与它们所在的父类相关(根据post 2)?post 1中接受的答案是,内部类也是父类的子类。如果这是真的,那么返回这个内部/子类是有意义的。但是根据post 2,内部类不是子类。我该怎么办?此方法返回内部类或子类的实例吗?

    2 回复  |  直到 1 周前
        1
  •  0
  •   Andreas    1 周前

    我想知道返回一个匿名类的含义,例如:

        return new BaseInitializable() {
            ...
        };
    

    那取决于什么 BaseInitializable 是。如果是 ,则匿名类是 基本可初始化 . 如果是 界面 ,则匿名类是 Object 它实现了 基本可初始化 .

    另外,请记住,根据定义,匿名类是内部类。JLS说 15.9.5. Anonymous Class Declarations :

    匿名类总是一个内部类。

    也就是说,回答你的问题:

    此方法返回内部类或子类的实例吗?

    两者都有。匿名类是一个内部类 (的)子类 基本可初始化 对象 )

    或者,如果你不考虑 对象 作为它们的超类的子类:
    这要看情况而定。匿名类是一个内部类。它是 如果子类实现了 不是一个 接口 .

        2
  •  0
  •   swpalmer    1 周前

    这种说法“[内部类]只与它们所在的父类相关”是完全错误的。

    内部类具有对外部类的隐藏引用,并且具有访问外部类的私有成员的权限。这基本上就是它与众不同的地方。

    您所讨论的方法确实返回了从BaseInitializable派生或实现BaseInitializable的匿名内部类的实例(这是接口还是类?).

    注意,如果baseInitializable是一个类,那么这个匿名内部类是 BaseInitializable的一个子类。如果BaseInitializable是一个接口,那么从技术上讲它不是一个子类。

    在本例中,内部类不是外部类的子类。我想这就是2号帖子所说的。