類醫院
package app;
import java.util.ArrayList;
import app.Department;
public class Hospital {
String hospitalId;
String hospitalName;
int departmentCount;
ArrayList<Department> departmentList = new ArrayList<Department>();
public Hospital(String hospitalId, String hospitalName, ArrayList<Department> departmentList, int departmentCount) {
this.hospitalId = hospitalId;
this.hospitalName = hospitalName;
this.departmentList = departmentList;
this.departmentCount = departmentCount;
}
public ArrayList<Department> getDepartmentList() {
System.out.println("Returning " departmentList.size());
return departmentList;
}
}
班級部
package app;
public class Department {
String departmentId;
private String hospitalDeptName;
String hospitalDeptType;
String subtypeBitFlag;
String status;
public Department(String departmentId, String hospitalDeptName, String hospitalDeptType, String subtypeBitFlag, String status) {
this.departmentId = departmentId;
this.hospitalDeptName = hospitalDeptName;
this.hospitalDeptType = hospitalDeptType;
this.subtypeBitFlag = subtypeBitFlag;
this.status = status;
}
public String getDepartmentName() {
return hospitalDeptName;
}
}
我正在創建一個物件 Department 并將它們存盤在 ArrayList
ArrayList<Department> departmentList = new ArrayList<Department>();
departmentList.add(new Department(departmentId, hospitalDeptName, hospitalDeptType, subtypeBitFlag, status));
我正在創建一個物件 Hospital 并將上面的 departmentList 作為部門串列傳遞給建構式
ArrayList<Hospital> hospitalList = new ArrayList<Hospital>();
Hospital hospital = new Hospital(hospitalId, hospitalName, departmentList, departmentList.size());
遍歷醫院物件并提取資訊
for (Hospital hospital : hospitalList) {
System.out.println("The number of departments is: " hospital.departmentList.size() " for Hospital: " hospital.hospitalId );
for (Department department : hospital.departmentList) {
System.out.println("Hospital ID: " hospital.hospitalId ", Hospital Name: " hospital.hospitalName ", Department Name: " department.getDepartmentName());
}
}
日志如下所示。我無法找回部門,甚至無法找回他們的價值觀。但是...我能夠從物件 Hospital 中檢索除 ArrayList 之外的任何內容。計數 0 證明好像物件 Hospital 沒有填充 Department 的陣列串列
The number of departments is: 0 for Hospital: q
The number of departments is: 0 for Hospital: a
The number of departments is: 0 for Hospital: s
The number of departments is: 0 for Hospital: 1
The number of departments is: 0 for Hospital: 2
The number of departments is: 0 for Hospital: 3
uj5u.com熱心網友回復:
您只創建了一個陣列串列,所有醫院都只參考了同一個串列,您稍后將其清除,因此,所有部門都被洗掉了。
讓我們一步一步來:
ArrayList<Department> departmentList = new ArrayList<Department>();
這會創建一個新的 arraylist 物件,并將對它的參考分配給一個名為 的新宣告的區域變數departmentList。new ArrayList()就像“蓋房子”,ArrayList<Department> departmentList;就像“在地址簿中打開一個新頁面并將其命名為“departmentList”。departmentList = new...是:在地址簿上寫下那個房子的地址。至關重要departmentList的一點:與串列不同——它是對它的參考——它是地址簿中的頁面,你可以用來到達房子,而不是房子本身。
departmentList.add(new Department(departmentId, hospitalDeptName, > hospitalDeptType, subtypeBitFlag, status));
.是取消參考運算子:這相當于“在地址簿中獲取標題為“departmentList”的頁面,然后走到房子本身。打開門并對它大喊“添加!”。事情可能會發生在你做這個。
Hospital hospital = new Hospital(hospitalId, hospitalName, departmentList, departmentList.size());
專注于departmentList部分:這說:“拿一張紙,把地址復制到上面,然后把那張紙交給醫院建設者”。它不會克隆串列。
public Hospital(String hospitalId, String hospitalName, ArrayList<Department> departmentList, int departmentCount) { this.departmentList = departmentList; }
更多地址簿頁面的復制。從來沒有人在任何地方復制房子。
現在有許多筆記本頁面在上面浮動,所有的地址都相同。如果有頁面的任何人決定訪問一所房子并通過窗戶扔一塊磚,其他人也會看到。這不好 - 現在有人可以更改您醫院的科室串列。您可能想克隆該陣列串列。
您的醫院建構式應該有:
this.departmentList = List.copyOf(departmentList);
反而。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/532194.html
標籤:爪哇班级目的数组列表
上一篇:SerializeField/Serializable不適用于自定義類串列(List<customClass>)
下一篇:C#“通用值引數”
