Ich habe drei Klassen:eine übergeordnete Klasse Java Casting
public abstract class X{
....
}
public class Y extends X{
clone(){}
.....
}
public class Z extends X{
clone(){}
.....
}
Ich habe eine Set<X> set
welche Objekte Z oder Y umfasst. Was, wenn ich ein bestimmtes Element des Sets klonen möchte, muss ich Wenns verwenden?
for(X x:set){
if(x.getClass().getSimpleName().equals("Y")){
Y n = (Y) x
n.clone();
}
}
Ich möchte wissen, ob es einen einfacheren Weg, um dieses
Vielleicht fehlt mir etwas, aber kannst du der X-Klasse keine abstrakte Methode hinzufügen? Wie 'public abstract void clone();'? Dann können Sie einfach 'x.clone();' in Ihrer Schleife ohne Casting ausführen, und es wird die überschriebene 'clone'-Methode der Z- und Y-Klassen verwenden. –
'if (x.getClass() == Y.class)' ist einfacher und robuster - es gibt viele Klassen namens 'Y', aber Sie können nur eine davon mit' (Y) 'darstellen. Aber Sie können auch finden, dass x x instanceof Y auch einfacher ist - es ist nicht * genau * das gleiche - dies entspricht auch Unterklassen von "Y". –
Wie Kevin sagte, sollten Sie eine abstrakte Methode 'clone()' hinzufügen, wenn Sie 'clone()' aufrufen wollen. Innerhalb Ihrer Schleife müssen Sie Ihr Objekt dann nicht in Ihre Kindklasse umwandeln. – Aakash