铸造超类 Java

Casting a SuperClass 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();
   }
}

我想知道是否有更简单的方法来做到这一点

如果您只想克隆 Y 个对象,是的,使用 if 可能是最简单的方法,您应该使用 instanceof:

for(X x:set){
   if(x instanceof Y)){
       Y n = (Y) x
       n.clone();
   }
}

使 class X 实现可克隆。然后按照建议使用 instanceof 在对象上调用 clone()。