【发布时间】:2016-12-29 15:43:19
【问题描述】:
我的Parent 班级是这样的:
public abstract class Parent{
protected HashMap<String, Foo> field;
public abstract void method1();
}
现在,Parent 类的两个孩子需要遍历 HashMap 来做一些事情。第一个孩子需要Foo 类,所以没有问题。不过,第二个孩子的 method1() 是这样实现的:
@Override
public void method1(){
for(Foo i : this.field.values(){
((Bar) i).specificMethod();
/* other code */
}
}
当然,Bar 扩展了 Foo。如您所见,强制转换以使用Bar 类的特定方法。可以通过某种方式避免这种情况吗?我知道我可以像这样在Parent 类中使用泛型:
public abstract class Parent<T extends Foo>{
protected HashMap<String, T> field;
/* etc. */
}
但我不知道这是否被视为不良行为。
【问题讨论】:
-
声明地图为
Map<String, Bar>?,如果它包含Bars 任何方式。 -
您的通用方法
class Parent<T extends Foo>很好。 prashant 的回答中还有另一种选择。我会立即更喜欢泛型,但您最好自己权衡利弊。
标签: java generics inheritance casting