2014-10-10 40 views
0

這是我的主類:如何填寫內部班的Arraylist?

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,我得到這個錯誤:

No enclosing instance of type SecondClass is accessible. Must qualify the allocation with an enclosing instance of type SecondClass (e.g. x.new A() where x is an instance of SecondClass).

我需要有InnerClass非靜態,因爲InnerClass需要對非靜態方法進行靜態引用。我如何在ArrayList中添加元素?

+0

申報'InnerClass'爲'static' – 2014-10-10 16:05:46

+0

@ColonelThirtyTwo不會是一個內部類,但一個嵌套類。 – 2014-10-10 16:07:53

+0

什麼是「對靜態方法的靜態引用」? – 2014-10-10 16:08:06

回答

0

我做nested classes一些研讀,特別是static和非靜態嵌套類之間的差異。

如果你選擇做一個InnerClass靜態嵌套類,注意以下幾點:

A static nested class interacts with the instance members of its outer class (and other classes) just like any other top-level class. In effect, a static nested class is behaviorally a top-level class that has been nested in another top-level class for packaging convenience.

這意味着你不需要的SecondClass一個實例,以使InnerClass實例 - 您可以對其進行實例化就像你現在所做的一樣。

然而,如果你做InnerClass非靜態嵌套類(我相信它們有時被稱爲內部類,但仔細檢查這個術語),你需要爲了創造創造SecondClass實例的InnerClass一個實例:

new SecondClass().new InnerClass() 
+0

它現在的作品,非常感謝! :) – eliaS 2014-10-10 16:24:58

+0

@eliaS注意,'new SecondClass()。new InnerClass()'創建外部類('SecondClass')的新實例,然後創建內部類('InnerClass')。所以如果你把這段代碼放到循環中,你將得到相同數量的'SecondClass'和'InnerClass'類的新實例。這似乎是過度的事情,因爲在循環之前,您可以創建'SecondClass'類的實例('SecondClass outer = new SecondClass();'),然後使用這個外部實例循環創建'InnerClass'的實例('outer.new InnerClass ()'),它將以外部和N個內部實例結束。 – Pshemo 2014-10-10 16:31:30

7

我想你需要:

new SecondClass().new InnerClass() 
+0

或者,或者你可以使InnerClass靜態。否則,Daniel是對的,爲了實例化InnerClass,你需要一個SecondClass的實例來完成它。 – 2014-10-10 16:14:40

0

讓靜將InnerClass

public class SecondClass { 
    public static class InnerClass{ 

    } 
} 
1

當你想使用一個內部類,你必須創建它包含內部類的類的實例。之後,你會使用它。例如如何使用內部類的Oracle教程如下:

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

而且你可以在這裏看到的細節:http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html