簡體   English   中英

如果ArrayList是實例變量,是否在Java中自動將其聲明為靜態?

[英]Is an ArrayList automatically declared static in Java, if it is an instance variable?

我正在嘗試做這樣的事情:

private class aClass
{
  private ArrayList<String> idProd;

  aClass(ArrayList<String> prd) 
  {
      this.idProd=new ArrayList<String>(prd);
  }

public ArrayList<String> getIdProd()
  {
      return this.idProd;

  }
}

因此,如果我有ArrayLIst<String> (st1,st2,st3)的多個實例,並且想要創建aClass的新對象:

{
 aClass obj1,obj2,obj3;
 obj1=new aClass(st1);
 obj2=new aClass(st2);
 obj3=new aClass(st3);
}

如果我為每個aClass對象(obj1..obj3)訪問方法getIdProd(),所有aClass對象都會返回st3嗎? 是否將ArrayList作為實例變量自動聲明為靜態?

不,除非您已聲明成員變量,否則成員變量不會自動為靜態。 我建議您重新格式化問題並發布其他上下文,以使您的問題更清楚。 您得到的結果很可能與您預期的結果有所不同,其原因與問題所暗示的原因不同。

您可以在類中從現有數組列表中創建一個新的數組列表,這會將現有數組列表的所有元素添加到新數組列表中。

但是,元素是相同的,因為數組列表不是“深度克隆”的,這似乎是您想要的。 您必須構建一個構造函數,該構造函數在所有元素上調用clone()並將克隆添加到類中的新數組列表中。

順便說一句:使用代碼格式功能可以使您的問題更具可讀性。 編輯:哦,當我發布此答案時,您做到了:)

數據成員不是自動靜態的,除非您在接口內部聲明它們(不常見)

由於您在構造函數中復制了數組列表,並且項類型是不可變的(字符串),因此,aClass的不同實例可以在完全不同的ArrayList副本上工作。

暫無
暫無

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

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