我想优化这段代码,因为我可以有多个父母和孩子(自加入hibernate)。我想要一些父母来安置孩子。例如,事件是父事件,它可能具有像编辑、创建、更新、删除这样的第n个子类。虽然有些父母喜欢交易,但电影和餐厅可能有孩子,也可能没有孩子。有没有办法编写通用代码?
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);发布于 2020-01-12 05:10:29
您可以创建这样的函数来设置权限。
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;
}发布于 2020-01-12 03:54:03
我尝试用@superBuilder和@builder来示例代码。
这将减少一些代码行。更多细节:https://www.baeldung.com/lombok-builder-inheritance
@SuperBuilder
public class Child extends Parent {
private String a;
private int b;
private boolean c;
}
@SuperBuilder
public class Parent {
private double d;
private float e;
private String parentId;
}
Child instance = Child.builder().b(7).e(6.3).parentId(parentId).build();发布于 2020-01-12 16:10:10
类特权{ String 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);
}}
https://stackoverflow.com/questions/59700602
复制相似问题