2013-05-08 116 views
1

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

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(); 
    } 
} 
+2

发布编译器投诉。 – 2013-05-08 04:30:55

+0

-1不发布编译器错误。 – 2013-05-08 04:37:29

+0

http://stackoverflow.com/questions/12690128/how-to-instantiate-non-static-inner-class-within-a-static-method – RAS 2013-05-08 06:49:52

回答

13

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

4

Wrapper需要被声明为静态:

static class Wrapper 

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

(这是假设你main方法是BinaryTree。如果没有,你还需要申请什么普里特僧伽建议。)

1

Wrapper是一个非静态的内部类BinaryTree。有两种方法来创建包装的对象:

  1. Wrapper静态和直接为Wrapper wrapper = new Wrapper();

  2. 创建的Wrapper对象实例化外部类即BinaryTree的对象,并使用BinaryTree对象,按如下方式创建的Wrapper一个目的:

BinaryTree binary = new BinaryTree(); 
Wrapper wrapper = binary.new Wrapper(); 
相关问题