如何将 ArrayList 中的对象添加到另一个 class 中的另一个 ArrayList
How to add an object from an ArrayList to another ArrayList in another class
我有两个classes Student和ClassRoom,每个class都有一个ArrayList。我正在尝试将学生对象从学生 ArrayList 移动到 ClassRoom ArrayList,但它不起作用。
教室class代码:
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);
}
学生class代码:
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 中,您创建的每个 class 都隐式继承自类型 Object
。例如,这就是 toString()
和 hashCode()
方法的来源。所以如果你想把 Student
和 Classroom
放在同一个列表中,你可以把它们放在 <Object>
类型的 List
中......但是什么都没有 太 有趣,你可以用它来做。但是,它会强调一点,您将能够与该列表中的元素执行类型的交互,这些元素足够通用以支持所有包含的元素;也就是说,您可以在 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
另一个 class喜欢CollegeEntity
。相反,Java 允许 class 实现多种接口,因此 Student
和 Classroom
可能被视为 ISchoolEntity
和 ICollegeEntity
,如果应用程序稍后需要它。
我有两个classes Student和ClassRoom,每个class都有一个ArrayList。我正在尝试将学生对象从学生 ArrayList 移动到 ClassRoom ArrayList,但它不起作用。
教室class代码:
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);
}
学生class代码:
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 中,您创建的每个 class 都隐式继承自类型 Object
。例如,这就是 toString()
和 hashCode()
方法的来源。所以如果你想把 Student
和 Classroom
放在同一个列表中,你可以把它们放在 <Object>
类型的 List
中......但是什么都没有 太 有趣,你可以用它来做。但是,它会强调一点,您将能够与该列表中的元素执行类型的交互,这些元素足够通用以支持所有包含的元素;也就是说,您可以在 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
另一个 class喜欢CollegeEntity
。相反,Java 允许 class 实现多种接口,因此 Student
和 Classroom
可能被视为 ISchoolEntity
和 ICollegeEntity
,如果应用程序稍后需要它。