这是我的主要课程:
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{
}
}
在MainClass
,list.add
,我收到此错误:
无法访问类型为SecondClass的封闭实例。必须符合资格 使用SecondClass类型的封闭实例进行分配(例如 x.new A()其中x是 SecondClass的实例。
我需要InnerClass
非静态,因为InnerClass
需要对非静态方法进行静态引用。如何在ArrayList
?
答案 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{
}
}