簡體   English   中英

如何避免在子類中轉換父級字段

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM