如何避免Java中的循环引用

时间:2017-06-26 01:46:40

标签: java

我正在尝试创建两个不同的类,这些类代表用户可以选择排序的不同练习选项。选择一个类后,另一个不再是一个选项,因此我在两个类中创建一个不允许跟随它的类。

问题在于,由于它们不能相互跟随,当构造这些类时会导致无限循环,有什么方法可以避免这种情况吗?

PushPullLegs类

public class PushPullLegs extends SortingGroup implements Serializable{
    public PushPullLegs(){
        this.setName("Push,Pull,Legs");
        this.addCantFollow(new MuscleGroup());

        SortingCategory push = new SortingCategory("Push","PPL","Push");
        this.addOption(push);
        SortingCategory pull = new SortingCategory("Pull","PPL","Pull");
        this.addOption(pull);
        SortingCategory legs = new SortingCategory("Legs","PPL","Legs");
        this.addOption(legs);        
    }
}

MuscleGroup Class

public class MuscleGroup extends SortingGroup implements Serializable {
    public MuscleGroup(){
        this.addCantFollow(new PushPullLegs());
        SortingCategory chest = new SortingCategory("Chest","Primary","Chest");
        chest.addNewOptions(new ChestMovementPatterns());
        this.addOption(chest);
        SortingCategory triceps = new SortingCategory("Triceps","Primary","Triceps");
        triceps.addNewOptions(new TricepMovementPatterns());
        this.addOption(triceps);
        SortingCategory lats = new SortingCategory("Lats","Primary","Lats");
        this.addOption(lats);
        SortingCategory quads = new SortingCategory("Quads","Primary","Quads");
        this.addOption(quads);
        SortingCategory hamstrings = new SortingCategory("Hamstrings","Primary","Hamstrings");
        this.addOption(hamstrings);
    }
}

1 个答案:

答案 0 :(得分:1)

您可以使用以下代码:

private Set<Class<? extends SortingGroup>> cantFollowClass = new HashSet<>();

public void addCantFollow(Class<? extends SortingGroup> clazz) {
    this.cantFollowClass = clazz;
}

public boolean canFollow(SortingGroup group) {
    return ! this.cantFollowClass.contains(group.getClass());
}