如何用内部类填充Arraylist?

时间:2014-10-10 16:04:21

标签: java inner-classes

这是我的主要课程:

import java.util.ArrayList;
public class MainClass {
    public static void main(String[] args){
        ArrayList<SecondClass.InnerClass> list=new ArrayList<SecondClass.InnerClass>();
        list.add(new SecondClass.InnerClass()); //error here (read below)
    }
}       

这是第二节课:

public class SecondClass {
    public class InnerClass{

    }
}

MainClasslist.add,我收到此错误:

  

无法访问类型为SecondClass的封闭实例。必须符合资格   使用SecondClass类型的封闭实例进行分配(例如   x.new A()其中x是        SecondClass的实例。

我需要InnerClass非静态,因为InnerClass需要对非静态方法进行静态引用。如何在ArrayList

中添加元素

4 个答案:

答案 0 :(得分:7)

我认为你需要:

new SecondClass().new InnerClass()

答案 1 :(得分:1)

我会在nested classes上阅读,特别是static和非静态嵌套类之间的差异。

如果您选择使InnerClass成为静态嵌套类,请注意以下内容:

  

静态嵌套类与其外部类(和其他类)的实例成员交互,就像任何其他顶级类一样。实际上,静态嵌套类在行为上是一个顶级类,它已嵌套在另一个顶级类中以方便打包。

这意味着您不需要SecondClass的实例来创建InnerClass的实例 - 您可以像现在一样实例化它。

但是,如果你使InnerClass成为一个非静态嵌套类(我相信这些有时被称为内部类,但请仔细检查这个术语) ,您需要创建SecondClass的实例才能创建InnerClass的实例:

new SecondClass().new InnerClass()

答案 2 :(得分:1)

如果要使用innerClass,则必须创建包含innerclass的类的实例。之后你将使用它。示例如何在Oracle教程之后使用内部类:

SecondClass sc=new SecondClass();
SecondClass.InnerClass in=sc.new InnerClass();

您可以在此处查看详细信息:http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html

答案 3 :(得分:0)

使InnerClass静态

public class SecondClass {
    public static class InnerClass{

    }
}