[英]java inheritance: distinguish between types of inherited classes
我有一個名為A
的抽象類,以及兩個繼承的類: B
和C
我有一個帶有參數的方法:
myMethod (final A a)
我想就實例化對象的類型做出不同的事情。 我該怎么做?
一個好的選擇是遵循另一種設計模式,但是現在不允許更改我的代碼。
謝謝。
使用instanceof
關鍵字。 例如:
if (a instanceof B) {...}
else if (a instanceof C) {...}
else {...}
使用instanceof
運算符:
myMethod (final A a) {
if(a instanceof B) {
//...
} else if(a instanceof C) {
//...
} else {
throw new IllegalArgumentException("Unknown type: " + a);
}
}
但是請記住,按照所有面向對象的原則,這是一種糟糕的做法。
您可以像其他人建議的那樣使用instanceof
運算符,如果這是一個僅由您自己從事的小項目,那可能很好。
鑒於您聲明無法重構(?), 另一個可怕的選擇是添加一個返回類型的抽象方法。
即添加以下內容到A:
public abstract Type getType();
public enum Type
{
B, C;
}
然后在B和C中實施它。
例如在B:
@Override
public Type getType()
{
return B;
}
最后,您可以在采用A的方法中使用它:
例如
public void myMethod(final A a)
{
if (a.getType() == Type.B)
doSomething();
else
doSomethingElse();
}
注意:以上是我個人不會使用的不良解決方案,但我認為它比使用instanceof
稍好 :
instanceof
時,您需要注意檢查的順序 instanceof
隱藏在某個地方的instanceof
(它跳出來並向您打臉) 但是,它仍然很可怕,因此,簡而言之,請盡可能地重構以避免這種情況。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.