Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在同一类的其他对象中设置同一类对象_Java_Spring_Spring Boot_Spring Mvc_Java 8 - Fatal编程技术网

Java 如何在同一类的其他对象中设置同一类对象

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

我想优化这段代码,因为我可以有多个父母和孩子(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);

我尝试使用@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);
}