如何将 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() 方法的来源。所以如果你想把 StudentClassroom 放在同一个列表中,你可以把它们放在 <Object> 类型的 List 中......但是什么都没有 有趣,你可以用它来做。但是,它会强调一点,您将能够与该列表中的元素执行类型的交互,这些元素足够通用以支持所有包含的元素;也就是说,您可以在 List.

中的任何元素上调用 Object 方法

因此,如果您想使用它的内容做一些更特定于应用程序的事情,也许您会对稍微不同的设计模式感兴趣。如果你想在同一个 List 中放置多种对象,必须有某种你想要的共享功能;在某些情况下,以与 Classroom 相同的方式处理 Student 似乎合乎逻辑。如果你想这样做,你可以同时拥有 StudentClassroom extend 一个类型为 SchoolEntityclass,它包含的方法和属性都 StudentClassroom 元素将需要。然后你可以创建一个 <SchoolEntity> 类型的 List 来容纳这两种甚至更多。

为了更大的灵活性,您可以定义一个接口 ISchoolEntityStudentClassroom 都可以实现,并使用 List<ISchoolEntity> 代替。这更灵活的原因是因为 Java 不支持多个 inheritance;这意味着一旦 ClassroomStudent extend SchoolEntity,以后他们将无法再 extend 另一个 class喜欢CollegeEntity。相反,Java 允许 class 实现多种接口,因此 StudentClassroom 可能被视为 ISchoolEntityICollegeEntity,如果应用程序稍后需要它。