考虑以下课程:
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
,我可以使用它进行某些操作,为此我需要了解实现类的所有者。我有两个不同的类实现此接口,可以说
MagicalStructure
和Spell
。某些向导可以说,
MagicalStructure
有其所有者,将其定义为属性Wizard owner
,因此轻松获得所有者很容易,因为我只需要一个getter。另一方面,
Spell
仅作为MagicalStructure
的一部分存在,因此其所有者与该咒语所在的MagicalStructure
的所有者相同。如何从
MagicalStructure
属性中访问Spell
的所有者?我还想访问指向包含此
MagicalStructure
属性的Spell
实例的指针。我之所以这样问,是因为我想预先生成一些
Spell
实例,然后将它们添加到现有的MagicalStructure
实例中。 最佳答案
您不能从MagicalStructure
或owner
访问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);
}