考虑以下课程:

public class Wizard {}

public interface Castable {
    /**
     * This class returns the owner of the source that is cast
     */
    Wizard getOwner();
}

public class Spell implements Castable{
    Wizard getOwner() {
        // Owner depends on the MagicalStructure this spell sits in
        // no idea what to do here
        // HELP ME THERE
    }

}

public class MagicalStructure implements Castable{
    private Wizard owner;
    private Spell spell;

    getOwner() {
        return owner;
    }

}

public class CastableQueue {
    private LinkedList<Castable> queue;

    public Wizard getOwnerOfFirst() {
        return queue.pop().getOwner();
    }
}


有什么事:
我有一些接口,可以说Castable,我可以使用它进行某些操作,为此我需要了解实现类的所有者。
我有两个不同的类实现此接口,可以说MagicalStructureSpell
某些向导可以说,MagicalStructure有其所有者,将其定义为属性Wizard owner,因此轻松获得所有者很容易,因为我只需要一个getter。
另一方面,Spell仅作为MagicalStructure的一部分存在,因此其所有者与该咒语所在的MagicalStructure的所有者相同。

如何从MagicalStructure属性中访问Spell的所有者?
我还想访问指向包含此MagicalStructure属性的Spell实例的指针。
我之所以这样问,是因为我想预先生成一些Spell实例,然后将它们添加到现有的MagicalStructure实例中。

最佳答案

您不能从MagicalStructureowner访问spell,除非它们建立了双向关系。

为了使这种访问成为可能,必须将每个Spell对象附加到特定的MagicalStructure,例如,在将其附加到MagicalStructure时:

public class Spell implements Castable{
    private MagicalStructure magStruct;
    public setMagicalStruct(MagicalStructure magStruct) {
        this.magStruct = magStruct;
    }
    public Wizard getOwner() {
        return magStruct.owner;
    }
}


当您将Spell实例传递给MagicalStructure的构造函数时,它将在其上调用setMagicalStruct,如下所示:

public MagicalStructure(Spell spell, Wizard wizard) {
    this.spell = spell;
    this.wizard = wizard;
    this.spell.setMagicalStruct(this);
}

09-07 00:31