【问题标题】:Why can't I instantiate an inner class inside of main? [duplicate]为什么我不能在 main 中实例化一个内部类? [复制]
【发布时间】:2013-05-02 05:03:14
【问题描述】:

为什么编译器会在这里抱怨?它不允许我在 main 中创建 Wrapper 对象。 MyList 是一个单独的类。如何创建它?

public class BinaryTree {
    Node root;

    class Wrapper {
        MyList.Node node;
    }

    class Node {
        Integer value;
        Node left;
        Node right;

        Node(int value) {
            this.value = value;
        }
    }

    public static void main() {
        MyList list = new MyList();
        Wrapper w = new Wrapper();
        w.node = list.getHead();
    }
}

【问题讨论】:

标签: java


【解决方案1】:

Wrapper 是一个内部(非静态嵌套)类。为了创建一个对象,它应该是静态的或通过外部类访问,例如new BinaryTree().new Wrapper()

【讨论】:

    【解决方案2】:

    Wrapper 需要声明为静态:

    static class Wrapper
    

    您是否考虑过将所有这些类移到单独的文件中?

    (这是假设您的 main 方法在 BinaryTree 中。如果不是,您还需要应用 Preet Sangha 的建议。)

    【讨论】:

      【解决方案3】:

      WrapperBinaryTree 的非静态内部类。 Wrapper对象的创建方式有两种:

      1. Wrapper设为静态,将Wrapper的对象直接创建为Wrapper wrapper = new Wrapper();

      2. 实例化外部类的对象,即BinaryTree,并使用BinaryTree的对象,创建Wrapper的对象如下:

       BinaryTree binary = new BinaryTree();
       Wrapper wrapper = binary.new Wrapper();
      

      【讨论】:

        猜你喜欢
        • 2014-08-31
        • 2018-02-22
        • 1970-01-01
        • 1970-01-01
        • 2014-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-08
        相关资源
        最近更新 更多