[英]How to add an object from an ArrayList to another ArrayList in another class
我有兩個類Student和ClassRoom,每個類都有一個ArrayList。 我正在嘗試將學生對象從學生ArrayList移到ClassRoom ArrayList,但它不起作用。
ClassRoom類代碼:
public class ClassRoom{
private String id;
private String name;
private int age;
ArrayList< ClassRoom >classRoom;
public ClassRoom(String id, String name, int age){
this.id = id;
this.name = name;
this.age = age;
}
public ClassRoom() {
classRoom = new ArrayList();
id = " ";
name = " ";
age = 0;
}
public void Add(String id,String name,int age){
ClassRoom c = new ClassRoom(id, name, age);
classRoom.add(c);
}
學生班級代碼:
public class Student{
private String id;
private String name;
private int age;
private ClassRoom classroom;
ArrayList< Student >students;
public Student(String id, String name, int age){
this.id = id;
this.name = name;
this.age = age;
}
public Student() {
students = new ArrayList();
id = " ";
name = " ";
age = 0;
}
public void Add(String id,String name,int age){
Student s = new Student(id, name, age);
students.add(s);
}
public void MoveToClassRoom(String id, String name, int age){
for(int i=0; i< students.size();i++){
if (students.get(i).getId().equals(id)){
classroom.Add(students.get(i).getId(), students.get(i).getName(), students.get(i).getAge());
students.remove(i);
}
}
}
Students
不是那種Classroom
。 因為您使用的是兩種特定於這兩種的ArrayList
,所以幾乎沒有互換性。 這樣做的原因是因為駐留在List
每個對象都必須沿着該行的某個位置共享與List
類型匹配的相同繼承鏈。
在Java中,您創建的每個類都隱式繼承自Object
類型。 例如,這就是toString()
和hashCode()
方法的來源。 因此,如果你希望把Student
和Classroom
在同一個列表,你可以將它們放置在一個List
類型的<Object>
...但沒有什么太有意思了 ,你會能夠與該做的事。 但是,這將突出說明您將能夠與該列表中的元素進行足夠類型的交互以支持所有包含的元素; 也就是說,您可以在List
任何元素上調用Object
方法。
因此,如果您想對其內容進行更多特定於應用程序的操作,可能會對稍微不同的設計模式感興趣。 如果要在同一List
放置多種對象,則必須具有某種共享功能。 在某些情況下,以與Classroom
相同的方式對待Student
似乎是合理的。 如果您想這樣做,則可以讓Student
和Classroom
extend
一個SchoolEntity
類型的class
,該類將包含Student
和Classroom
元素都需要的方法和屬性。 然后,您可以創建類型為<SchoolEntity>
的List
,以容納這兩種類型甚至更多種類型。
為了獲得更大的靈活性,您可以定義一個ISchoolEntity
接口, Student
和Classroom
都可以實現該接口,而改用List<ISchoolEntity>
。 之所以更靈活,是因為Java不支持多重inheritance
; 這意味着一旦Classroom
和Student
extend
SchoolEntity
,他們以后將無法再extend
諸如CollegeEntity
類的其他課程。 相反,Java允許類實現多種接口,因此如果以后需要應用程序,則可以將Student
和Classroom
視為ISchoolEntity
和ICollegeEntity
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.