我有两个类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);
}
}
}
答案 0 :(得分:1)
Students
不是Classroom
种类。因为您使用了两种特定于这两种类型的ArrayList
,所以可互换性很小。这样做的原因是因为位于List
的每个对象必须在该行的某个位置共享与List
类型相匹配的相同的继承链。
在Java中,您创建的每个类都隐式继承自类型Object
。例如,这是toString()
和hashCode()
方法的来源。因此,如果您想将Student
和Classroom
放在同一个列表中,可以将它们放在List
类型<Object>
中......但是没有任何内容太有趣的你能够做到这一点。然而,它会突出表明您能够执行与该列表的元素的交互类型,这些元素的通用性足以支持所有包含的元素;即,您可以在Object
内的任何元素上调用List
个方法。
所以,如果你想用它的内容做更多特定于应用程序的事情,也许你会对略有不同的设计模式感兴趣。如果要在同一List
内放置多种对象,则必须具有某种所需的共享功能;在某些情况下,以与Student
相同的方式处理Classroom
似乎合乎逻辑。如果你想这样做,你可以同时拥有Student
和Classroom
extend
class
SchoolEntity
类型Student
,其中包含两个方法和属性{需要{1}}和Classroom
个元素。然后,您可以创建List
类型<SchoolEntity>
,以保持两种甚至更多种类。
为了获得更大的灵活性,您可以定义ISchoolEntity
和Student
都可以实现的接口Classroom
,并使用List<ISchoolEntity>
代替。这更灵活的原因是因为Java不支持多个inheritance
;这意味着一旦Classroom
和Student
extend
SchoolEntity
,以后他们也无法extend
另一个人CollegeEntity
像Student
这样的课程。相反,Java允许类实现多种接口,因此Classroom
和ISchoolEntity
可能被视为ICollegeEntity
和{{1}}两种类型,如果应用程序稍后需要它。