我使用向量来存储AnAbstractClass
超类的对象。抽象类只包含两个非构造函数方法:
public final String getName() {
return name;
}
public abstract int getCost();
在每个子类中,我创建了一个getCost
方法。在anotherClass
内,我有抽象类对象的向量。在anotherClass
的方法中,我使用的字符串包含特定于多个子类的名称,成本和其他数据类型。我目前正在访问该向量以检索name
和cost
就好了。
但是,当我尝试访问特定于每个子类的其他字段(即:getColor
或getSize
时,我遇到以下编译错误:
Error: cannot find symbol
symbol: method <mySubClassMethod>()
location: class <MyAbstractClass>
如何有效地设计解决这一难题的解决方案?
答案 0 :(得分:0)
要访问特定于子类的方法,需要转换为子类。
示例:
Subclass foo = (Subclass) myAnAbstractClassInstance;
如果您不知道自己的子类,可以使用instanceof进行类型检查
实施例
// Subclass implements size and color, but superclass does not
if (foo instanceof Subclass) {
Subclass foobar = (Subclass) foo;
int size = foobar.size();
String color = foobar.color();
}
替代解决方案: 1.让所有子类提供所有方法(即使它们什么都不做) 2.让所有子类提供一种方法,让您知道它们支持哪些方法
答案 1 :(得分:0)
将getColor和getSize添加到抽象类中,或者如果您想要完全动态的东西,请尝试使用getData()这样的方法返回名称/值对的Map。 如果你需要更动态的东西,请尝试使用groovy而不是java。那么你可以通过MetaProgram摆脱任何困境!