Как установить объекты того же класса в другом объекте того же класса - PullRequest
0 голосов
/ 12 января 2020

Я хочу оптимизировать этот код, поскольку у меня может быть несколько родителей и детей (само присоединение в спящем режиме). Я хочу, чтобы некоторые родители установили детей. Например, событие является родительским и может иметь n-ые дочерние элементы, такие как «Редактировать, создавать, обновлять», «Удалить». В то время как некоторые родители, такие как Deals, Movies и Resturant, могут иметь или не иметь детей. Есть ли способ написать обобщенный c код

        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);

Ответы [ 3 ]

0 голосов
/ 12 января 2020

Вы можете создать такую ​​функцию, чтобы установить привилегии

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;
    }
0 голосов
/ 12 января 2020

Привилегия класса {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);
    }
}

}

publi c Проверка класса {

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);
}

}

0 голосов
/ 12 января 2020

Я попытался сэмплировать код с @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();
...