Java 如何在同一类的其他对象中设置同一类对象
我想优化这段代码,因为我可以有多个父母和孩子(hibernate中的自加入)。我想让一些父母给孩子们安顿下来。例如,事件是一个父事件,它可能有n个子事件,如编辑、创建、更新、删除。虽然有些父母喜欢交易,但电影和餐馆可能有孩子,也可能没有孩子。有没有办法编写通用代码Java 如何在同一类的其他对象中设置同一类对象,java,spring,spring-boot,spring-mvc,java-8,Java,Spring,Spring Boot,Spring Mvc,Java 8,我想优化这段代码,因为我可以有多个父母和孩子(hibernate中的自加入)。我想让一些父母给孩子们安顿下来。例如,事件是一个父事件,它可能有n个子事件,如编辑、创建、更新、删除。虽然有些父母喜欢交易,但电影和餐馆可能有孩子,也可能没有孩子。有没有办法编写通用代码 Privilege parent = new Privilege("Event"); Privilege parent1 = new Privilege("Deals"); Privil
Privilege parent = new Privilege("Event");
Privilege parent1 = new Privilege("Deals");
Privilege parent2 = new Privilege("Movies");
Privilege parent3 = new Privilege("Restaurant");
Privilege parent4 = new Privilege("Outdoor");
Privilege child = new Privilege("Create");
child.setParentId(parent);
Privilege child1 = new Privilege("Edit");
child1.setParentId(parent);
Privilege child2 = new Privilege("Update");
child2.setParentId(parent);
Privilege child3 = new Privilege("Delete");
child3.setParentId(parent);
我尝试使用@superBuilder和@builder对代码进行采样
这将减少一些代码行。 更多详情:
您可以创建这样的函数来设置权限
private static List<Privilege> setPrivileges() {
Privilege parent = setParentPrivilege("Event");
Privilege parent1 = setParentPrivilege("Deals");
Privilege parent2 = setParentPrivilege("Movies");
Privilege parent3 = setParentPrivilege("Restaurant");
Privilege parent4 = setParentPrivilege("Outdoor");
Privilege child = setFirstLevel(parent, "Create");
Privilege child1 = setFirstLevel(parent, "Edit");
Privilege child2 = setFirstLevel(parent, "Update");
Privilege child3 = setFirstLevel(parent, "Delete");
Privilege subchild1 = setSecondLevel(child3,"Sub Delete");
return Collections.unmodifiableList(
Arrays.asList(
parent,
parent1,
parent2,
parent3,
parent4,
child,
child1,
child2,
child3,
subchild1
));
}
private static Privilege setParentPrivilege(String name) {
return new Privilege(name);
}
private static Privilege setFirstLevel(Privilege firstLevel, String name) {
Privilege firstLevelChild = setParentPrivilege(name);
firstLevelChild.setParentId(firstLevel);
return firstLevelChild;
}
private static Privilege setSecondLevel(Privilege secondLevel, String name) {
Privilege secondLevelChild = new Privilege(name);
secondLevelChild.setParentId(secondLevel);
return secondLevelChild;
}
private静态列表setPrivileges(){
Privilege parent=setParentPrivilege(“事件”);
Privilege parent1=setParentPrivilege(“交易”);
Privilege parent2=setParentPrivilege(“电影”);
Privilege parent3=setParentPrivilege(“餐厅”);
Privilege parent4=setParentPrivilege(“户外”);
特权子级=setFirstLevel(父级,“创建”);
特权child1=setFirstLevel(父级,“编辑”);
特权child2=setFirstLevel(父级,“更新”);
特权child3=setFirstLevel(父级,“删除”);
特权subchild1=setSecondLevel(child3,“子删除”);
return Collections.unmodifiableList(
Arrays.asList(
父母亲
父母1,
父母2,
父母3,
父母4,
小孩
孩子1,
孩子2,
孩子3,
子弟1
));
}
私有静态特权setParentPrivilege(字符串名称){
返回新特权(名称);
}
私有静态特权setFirstLevel(特权firstLevel,字符串名称){
Privilege firstLevelChild=setParentPrivilege(名称);
firstLevelChild.setParentId(firstLevel);
返回第一个孩子;
}
私有静态特权setSecondLevel(特权第二级,字符串名称){
特权secondLevelChild=新特权(名称);
secondLevelChild.setParentId(secondLevel);
返回二级儿童;
}
类特权{
字符串s
public Privilege(String a) {
this.s = a;
}
public void setParentId(Privilege aa) {
System.out.println(aa);
}
public void setParents(Privilege... a) {
for (Privilege aa : a) {
this.setParentId(aa);
}
}
}
公开课考试{
public static void main(String[] sre) {
Privilege parent = new Privilege("Event");
Privilege parent1 = new Privilege("Deals");
Privilege parent2 = new Privilege("Movies");
Privilege parent3 = new Privilege("Restaurant");
Privilege child = new Privilege("Create");
Privilege child1 = new Privilege("Edit");
Privilege child2 = new Privilege("Update");
Privilege child3 = new Privilege("Delete");
parent.setParents(child,child1,child3,child2);
}
}在创建父集合中的子集合时,使用生成器设计模式it@MandarDharurkar你能举个例子吗?我在hibernate中实现了自连接,我需要对同一类的子对象设置相同的引用,但是你能用builder简化它吗patterns@MandarDharurkar看看这个,我想把它转换成你们提到的生成器模式
public static void main(String[] sre) {
Privilege parent = new Privilege("Event");
Privilege parent1 = new Privilege("Deals");
Privilege parent2 = new Privilege("Movies");
Privilege parent3 = new Privilege("Restaurant");
Privilege child = new Privilege("Create");
Privilege child1 = new Privilege("Edit");
Privilege child2 = new Privilege("Update");
Privilege child3 = new Privilege("Delete");
parent.setParents(child,child1,child3,child2);
}