【问题标题】:Can we say that a method-local class is a type of Inner class?我们可以说方法本地类是 Inner 类的一种吗?
【发布时间】:2016-10-12 10:36:30
【问题描述】:

由于我们不能将static 修饰符与定义在方法内的本地类一起使用,并且由于非静态嵌套类是内部类,我们可以说方法本地类是内部类的一种类型。

但另一方面,我们说如果没有封闭类的 Live 实例,内部类的实例就不能存在。但是静态方法中定义的方法本地类的实例可以在没有封闭类的活动实例的情况下存在,对吧?

那么我从中得出什么结论呢? 第一个逻辑告诉我本地类是 Inner 类的一种,第二个推理告诉我 Local 类不是 Inner 类。

【问题讨论】:

    标签: java inner-classes anonymous-inner-class local-class


    【解决方案1】:

    我们说如果没有封闭类的 Live 实例,内部类的实例就不能存在

    没有。来自the JLS(强调我的):

    如果 O 是 C 的直接封闭类型声明并且 C 的声明不会出现在静态上下文中,则内部类 C 是类或接口 O 的直接内部类。。 p>

    [...]

    类或接口 O 的直接内部类 C 的实例 i 与 O 的实例相关联,称为 i 的直接封闭实例。

    这告诉我们可能有一个没有封闭实例的内部类。尤其是在静态上下文中定义的情况下会发生这种情况。

    【讨论】:

    • 换句话说,如果没有封闭类的活动实例,内部类实例就不能存在,除非内部类发生在静态上下文中(例如,在静态方法中) 对吧?
    • 一个问题:我知道如果在名为 O 的顶级封闭类中直接定义了一个名为 C 的内部类(通过 直接 ,我的意思是在其他成员声明的级别),那么 C 是 O 的 立即 内部类。但是说局部类 A 在名为 B 的类中名为 M 的方法中定义,是 A B的立即内部类?我对那里使用“立即”这个词有点困惑。
    猜你喜欢
    • 2023-03-23
    • 2015-05-22
    • 2019-07-01
    • 1970-01-01
    • 2022-12-17
    • 2020-10-01
    • 1970-01-01
    • 2021-10-28
    • 1970-01-01
    相关资源
    最近更新 更多