层次的叠加,实现一对多,然后多对多的层次叠加。
主要方式就是在类里面实现构造方法的实例化集合list,目前只是一个思路和一个比较烦乏的方法,或许使用反射可以构造相关的工具类
在下边我将以实例说明:
1.我创建了4个类,分别是学校类School,教室类ClassRoom,学生类Student.。还有一个Test测试类
其中School类,ClassRoom类里面都是实现一对多关系,所以我将它们构造方法创建为:
public School(String name){
String name;
list=new ArrayList<>();
}
只要new School,肯定会创建一个新的list,后面用来装载相关的ClassRoom
同样的,ClassRoom也是一样,只要new ClassRoom,也会创建一个新的list,用来装载相关的Student;以此思路,层层推下去
具体实现代码如下:
School类:
package test;
import java.util.ArrayList;
import java.util.List;
public class School {
private String name;
private List<ClassRoom> list;
public School(String name){
this.name=name;
list=new ArrayList<>();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<ClassRoom> getList() {
return list;
}
}
============================
ClassRoom类:
package test;
import java.util.ArrayList;
import java.util.List;
public class ClassRoom {
private String name;
private List<Student> list;
public ClassRoom(String name){
this.name=name;
list=new ArrayList<>();//在ClassRoom cr=new ClassRoom("大鳄")时就激活list,然后
//cr就可以直接使用list。然后cr.getName中可以使用Student集合list
}
public String getName() {
return name;
}
// public void setName(String name) {
// this.name = name;
// }
public List<Student> getList() {
return list;
}
public void setList(List<Student> list) {
this.list = list;
}
}
==========================
Student类:
package test;
public class Student {
private String name;
private int age;
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}
}
=============================
Test类:
package test;
import java.util.ArrayList;
import java.util.List;
/**
* 实现链式捆绑
* 也就是一个国家里面有多个省份一个省份里面有多个城市一个城市下面有多个县城
* 主要就是School、ClassRoom类里面的list泛型集合,主要是在构造方法里面,
* 只要我们实例化School或者ClassRoom,我们就可以得到一个新的实例,
* 而这个实例下面又包含了list集合,这样可以使我们不断的链接下去
*
* 相当于一个School类里面的getlist包含相关的ClassRoom类,然后ClassRoom类里面的getlist再包含相关的Student
* @author Administrator
*
*/
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
School sh=new School("天星");
School sh1=new School("地王");
ClassRoom cr=new ClassRoom("天王");
ClassRoom cr1=new ClassRoom("地狱犬");
ClassRoom cr2=new ClassRoom("天兵");
ClassRoom cr3=new ClassRoom("地狱判官");
Student stu=new Student("小飞侠", 23);
Student stu1=new Student("小刚侠", 45);
Student stu2=new Student("小柔侠", 223);
Student stu3=new Student("小机侠", 278);
Student stu4=new Student("da飞侠", 23);
Student stu5=new Student("da刚侠", 45);
Student stu6=new Student("da柔侠", 223);
Student stu7=new Student("da机侠", 278);
cr.getList().add(stu3);
cr.getList().add(stu);
cr1.getList().add(stu1);
cr1.getList().add(stu2);
cr2.getList().add(stu4);
cr2.getList().add(stu5);
cr3.getList().add(stu6);
cr3.getList().add(stu7);
sh.getList().add(cr);
sh.getList().add(cr1);
sh1.getList().add(cr2);
sh1.getList().add(cr3);
// List<ClassRoom>list=new ArrayList<>();
// list.add(cr1);
// list.add(cr);
//
// for (ClassRoom classRoom : list) {
// System.out.println(classRoom.getName()+"班里面有:");
// for (Student stu0 : classRoom.getList()) {
// System.out.println(stu0);
// }
// }
List<School>list=new ArrayList<>();
list.add(sh);
list.add(sh1);
int a=0;
for (School school : list) {
System.out.println(school.getName()+"下有:");
for(ClassRoom cla:school.getList()){
fix(a);
//System.out.println();
System.out.println(cla.getName()+"班里有:");
for(Student stu0:cla.getList()){
fix(a+1);
System.out.println(stu0);
}
}
}
}
public static void fix(int level){
StringBuffer sb=new StringBuffer("--");
for (int i = 0; i < level; i++) {
sb.append("--");
}
System.out.print(sb.toString());
}
}