簡體   English   中英

添加到 ArrayList 的 Java 對象未顯示

[英]Java object added to ArrayList not showing

我有兩個班級:

Class1 包含一個 Class2 類型的 ArrayList

當我嘗試按如下方式添加新對象時:

Class2 object = new Class2();
Class1Object.getArrayList().add(object);

然后當我遍歷 getArrayList() 時似乎已經添加了對象

但是,我有另一個類型為 class1 的 ArrayList,當我遍歷此對象時,添加的對象沒有出現?

我認為由於對象是按引用的,因此應該將其添加到 class1 類型的 ArrayList 中。 任何人都可以解釋這一點嗎?

public class Subject implements Serializable {

private static final long serialVersionUID = 1L;
private String subjectName;
private int hours;
private int mins;
private ArrayList<Task> tasks;
private SimpleDateFormat date;

public Subject(String subjectName){
    this.subjectName = subjectName;
    hours = 0;
    mins = 0;
    tasks = new ArrayList<Task>();
    date = null;
}


public ArrayList<Task> getTasks() {
    return tasks;
}

}

public class Task implements Serializable {

    private static final long serialVersionUID = 2L;
    private String description;
    private boolean isCompleted;

    public Task(String description){
        this.description = description;
        isCompleted = false;
    }   

}

那么我有:

ArrayList<Subject> subjectsList = new ArrayList<Subject>();

然后我想為給定的主題添加一個新任務,所以我這樣做:

Task task = new Task(description);
ArrayList<Task> taskList = subject.getTasks();
taskList.add(task);

當我迭代subject.getTasks(); 它在那里,但是當我遍歷 subjectList 時,新任務不再存在。

這是顯示新任務的第一個循環:

for (Task task : subject.getTasks()){
   System.out.println( task.toString() );
}

而在所有對象進行迭代的代碼subjectsList

for (Subject s : subjectsList){
 for (Task t : s.getTasks()){
   System.out.println( t.toString() );
    }
}



Bundle bundle = getIntent().getExtras();
  if (bundle != null) {
    subject = (Subject) bundle.get("selected_subject");
    subjectsList = (ArrayList<Subject>) bundle.get("subjects_list");
   }

所以你有兩個列表,你將一個對象添加到這兩個列表之一,並希望在第二個列表中找到它。 為什么會出現在第二個列表中? 他們是兩個不同的列表。

Java 對象就像真實的對象。 如果你把一條信息放在一個瓶子里,這個信息就不會出現在所有其他瓶子里。 只有在你放置它的地方。

如果您創建 2 個指向同一個對象的變量,則兩個引用都將包含該值,例如:

Class2 object = new Class2();
Class1 class1 = new Class1();
Class1 class1second = class1;
class1.getArrayList().add(object);

class1 和 class1second 都包含對象

如果是

Class2 object = new Class2();
Class1 class1 = new Class1();
Class1 class1second = new Class1();
class1.getArrayList().add(object);

只有一個對象包含該值。

我猜這是一個范圍問題。 嘗試只使用This.Class1Object.getArrayList().add(object); 因為也許您將對象添加到數組的本地化版本中。

我不明白這個問題。 很難理解。

但是,如果您的意思是 Class1Object 的第二個實例具有相同的 ArrayList 或不是您應該注意靜態的那個實例。

如果 ArrayList 的變量是靜態的,那么這些 Class 的所有實例都共享相同的 ArrayList 實例!

除非必要,否則避免使用靜態。

如果這不能解決您的問題,請提供更多示例代碼。

您似乎是在說您有兩個列表。 並且您希望添加到其中一個列表的對象自動出現在另一個列表中。

這不會發生在ArrayList或任何其他“正常”的List實現中。

“發生”的唯一方法是如果兩個列表是同一個對象。

(我喜歡 JB Nizet 的“瓶子里的信息”類比。)

暫無
暫無

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

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