簡體   English   中英

我如何用內部類填充Arraylist?

[英]How can I fill an Arraylist with 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{

    }
}

MainClass ,在list.add ,我得到這個錯誤:

無法訪問類型為SecondClass的封閉實例。 必須使用類型為SecondClass的封閉實例來限定分配(例如xxnew A(),其中x是SecondClass的實例)。

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

我認為您需要:

new SecondClass().new InnerClass()

我會仔細閱讀嵌套類 ,特別是static和非靜態嵌套類之間的區別。

如果選擇使InnerClass成為靜態嵌套類,請注意以下幾點:

靜態嵌套類與它的外部類(和其他類)的實例成員進行交互,就像其他任何頂級類一樣。 實際上,靜態嵌套類在行為上是頂級類,為了包裝方便,該頂級類已嵌套在另一個頂級類中。

這意味着您不需要SecondClass的實例即可創建InnerClass的實例-您可以像現在一樣實例化它。

但是,如果將InnerClass非靜態嵌套類(我相信有時將它們稱為內部類 ,但請仔細檢查此術語),則需要創建SecondClass的實例才能創建InnerClass的實例:

new SecondClass().new InnerClass()

當您想使用一個innerClass時,必須創建一個包含innerclass的類的實例。 之后,您將使用它。 遵循Oracle教程的示例如何使用內部類的示例:

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

您可以在此處查看詳細信息: http : //docs.oracle.com/javase/tutorial/java/javaOO/nested.html

使InnerClass靜態

public class SecondClass {
    public static class InnerClass{

    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM