java - 从其封闭类的静态方法中实例化一个内部类

标签 java inner-classes scjp

<分区>

我们知道静态上下文不能引用任何类型的任何实例,但是 main 方法会发生什么,下面的代码示例如何编译没有问题:

public class MyOuter
{
    public static void main(String[] args) 
    {
        MyOuter mo = new MyOuter(); // gotta get an instance!
        MyOuter.MyInner inner = mo.new MyInner();
        inner.seeOuter();

        //Or

        MyOuter.MyInner inner = new MyOuter().new MyInner();
    } 

    class MyInner
    {
        public void seeOuter(){}
    }
 }

不是禁止在其封闭类的静态上下文中实例化内部类吗?

最佳答案

isn't it forbidden to instantiate an inner class from within a static context in it's enclosing class?

否 - 禁止在没有封闭类实例的情况下实例化内部类。在你的例子中,你确实有一个封闭类的实例:

new MyOuter().new MyInner();

这完全没问题。

您通常可以在不从实例方法指定封闭类的情况下逃脱的唯一原因是它等同于

// Within an instance method
this.new MyInner();

参见 section 15.9.2 of the JLS更多细节。您的构造函数调用是“合格的类实例创建表达式”。

关于java - 从其封闭类的静态方法中实例化一个内部类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12473694/

相关文章:

java - 如何在Android上打开Java程序

android - TimePickerDialog 运行两次

java - 使用 JUnit 的内部类中的测试用例

java - 线程并发——同步和锁。

java - 理解同步

java - JPA JPQl 或 MySQL 中的存储过程

Java 11 根据枚举值选择一种方法应用于流

android - 从 fragment 的 onCreateView 方法向 savedInstanceState 添加变量

java - SCJP 测试的问题

java - 错误 - ListenerManager 无法初始化 httpstransport 监听器 - WSO2