我的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
类中使用Generics,如下所示:
public abstract class Parent<T extends Foo>{
protected HashMap<String, T> field;
/* etc. */
}
但我不知道这是否被视为不良行为。
答案 0 :(得分:2)
儿童班已经对地图内容有了深入的了解。正如你所提到的,铸造是一种丑陋而狡猾的方法。将此声明移动到类的通用规范使得它更加明显,并且可能是正确的方法。
答案 1 :(得分:1)
你的foo类应该有一个bar会覆盖的方法.....所以在所有情况下你都会调用
i.execute()
其中execute是foo中的一个方法,它将被子类覆盖....这样就不需要将对象显式地转换为子类类型了。