为什么我不能在 main 内部实例化内部类?



为什么编译器在这里抱怨?它不允许我在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();
    }
}

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

Wrapper需要声明为static:

static class Wrapper

你有没有想过把所有这些类移到单独的文件中?

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

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

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

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

:

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

最新更新