我有三類:鑄造超類的Java
public abstract class X{
....
}
public class Y extends X{
clone(){}
.....
}
public class Z extends X{
clone(){}
.....
}
我有一個Set<X> set
包含Z或Y的對象。如果我想克隆該集合中的某個元素,我需要使用ifs嗎?
for(X x:set){
if(x.getClass().getSimpleName().equals("Y")){
Y n = (Y) x
n.clone();
}
}
我想知道是否有這樣做
也許我失去了一些東西,但你不能添加一個抽象方法,以X級?像'public abstract void clone();'?然後你可以在你的循環中執行'x.clone();'而不用強制轉換,它將使用重寫的Z和Y類的'clone'方法。 –
'if(x.getClass()== Y.class)'更簡單,更健壯 - 可以有很多叫做'Y'的類,但是你只能用'(Y)'來投射它們中的一個。但是你也可能會發現'x instanceof Y'也更容易 - 它不完全相同 - 它也匹配'Y'的子類。 –
正如Kevin所說,如果你的主要意圖是調用clone(),你應該添加一個抽象方法clone()。然後,在你的循環中,你不需要將你的對象投射到你的子類。 – Aakash