java - 如何将 ArrayList 中的对象添加到另一个类中的另一个 ArrayList

标签 java class object arraylist

我有两个类(class)Student和ClassRoom,每个类(class)都有一个ArrayList。我正在尝试将学生对象从学生 ArrayList 移动到 ClassRoom ArrayList,但它不起作用。

ClassRoom类(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 中,您创建的每个类都隐式继承自类型 Object 。这就是toString()的地方和hashCode()方法来自,例如。所以如果你想输入 StudentClassroom在同一个列表中,您可以将它们放在 List 中类型 <Object> ...但是您无法用它做任何有趣的事情。然而,它会强调一点,即您能够与该列表中的元素执行交互类型,这些元素足够通用以支持所有包含的元素;即您可以调用 Object List 中任何元素上的方法.

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

为了获得更大的灵 active ,您可以定义一个接口(interface) ISchoolEntity ,两者 StudentClassroom可以实现并使用 List<ISchoolEntity>反而。之所以更灵活是因为Java不支持多个inheritance ;这意味着一旦 ClassroomStudent extend SchoolEntity ,以后他们就不可能 extend另一个类如 CollegeEntity 。相反,Java允许一个类实现多种接口(interface),因此StudentClassroom可能被视为两种 ISchoolEntityICollegeEntity ,如果应用程序稍后需要它。

关于java - 如何将 ArrayList 中的对象添加到另一个类中的另一个 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28788939/

相关文章:

c# - 字符串文字和字 rune 字可以连接吗?

java - 使用递归如何保持局部变量更新

javascript - 什么是更好的接口(interface)或类来拦截 Angular 6 中的 API 数据

java - 调用函数时数组为空(java)

java - 垃圾收集重载,Java

javascript - 根据另一个对象的值在对象中创建新属性

Java SuperCSV CsvBeanReader 尽管出现错误仍继续

java - (Android Studio) (Java) 使用 A 类中的 ArrayList 在 B 类中构建的方法时遇到问题

Python - 从对象列表中调用对象

java - 如何在 jSTL 中避免逗号