[英]How to avoid casting of a Parent's field in subclasses
我的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 */
}
}
當然,還有擴展Foo
Bar
。 如您所見,強制轉換必須使用Bar
類的特定方法。 可以通過某種方式避免這種情況嗎? 我知道我可以在Parent
類中使用泛型,例如:
public abstract class Parent<T extends Foo>{
protected HashMap<String, T> field;
/* etc. */
}
但我不知道這是否被視為不良行為。
子類已經對地圖的內容有深入的了解。 正如您提到的,投射是一種丑陋而狡猾的方法。 將此聲明移到類的通用規范后,它會變得更加明顯,並且可能是正確的方法。
您的foo類應該有一個方法,該方法將覆蓋bar .....所以在所有情況下,您都將調用
i.execute()
其中execute是foo中的一個方法,它將被子類覆蓋....這樣做將消除將對象顯式轉換為子類類型的需要。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.