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

时间:2015-03-01 01:09:25

标签: java class object arraylist

我有两个类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);
                }
    }
}

1 个答案:

答案 0 :(得分:1)

Students不是Classroom种类。因为您使用了两种特定于这两种类型的ArrayList,所以可互换性很小。这样做的原因是因为位于List的每个对象必须在该行的某个位置共享与List类型相匹配的相同的继承链。

在Java中,您创建的每个类都隐式继承自类型Object。例如,这是toString()hashCode()方法的来源。因此,如果您想将StudentClassroom放在同一个列表中,可以将它们放在List类型<Object>中......但是没有任何内容有趣的你能够做到这一点。然而,它会突出表明您能够执行与该列表的元素的交互类型,这些元素的通用性足以支持所有包含的元素;即,您可以在Object内的任何元素上调用List个方法。

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

为了获得更大的灵活性,您可以定义ISchoolEntityStudent都可以实现的接口Classroom,并使用List<ISchoolEntity>代替。这更灵活的原因是因为Java不支持多个inheritance;这意味着一旦ClassroomStudent extend SchoolEntity,以后他们也无法extend另一个人CollegeEntityStudent这样的课程。相反,Java允许类实现多种接口,因此ClassroomISchoolEntity可能被视为ICollegeEntity和{{1}}两种类型,如果应用程序稍后需要它。