Follow along with the video below to see how to install our site as a web app on your home screen.
Anmerkung: This feature may not be available in some browsers.
In dem Fall kann man Reflection nutzen.Oder ist die Frage (auch) so zu verstehen, dass eine Klasse über eine eigene/überschriebene Implementierung von equals() und hashCode() verfügt ?
Also der Grund ist folgender: Ich habe in einem Objekt ein Attribut welches drei unterschiedliche Klassen sein können. Hier mal etwas vereinfacht shematisch dargestellt:Mich würde auch mal der Kontext bzw. Grund der Frage interessieren.
class Container {
Object aufnahme; // Aufnahme nur für ClassA, ClassB, ClassC nicht ClassD
}
class ClassA {
....
}
class ClassB {
....
}
class ClassC {
....
}
class ClassD {
....
}
interface ContainerObject {}
class Container {
ContainerObject aufnahme; // Aufnahme nur für ClassA, ClassB, ClassC nicht ClassD
}
class ClassA implements ContainerObject {
....
}
class ClassB implements ContainerObject {
....
}
class ClassC implements ContainerObject {
....
}
class ClassD {
....
}
Das hatte ich auch vor. Deshalb kam ich darauf, ob equals, hash, clone funktion basiert. Momentan habe ich ein "abstrakt" Interface um diese Klassen kenntlich zu machen.Kannst du evtl. die Klassen A, B und C mit einem Marker-Interface versehen? Oder sind die von dir nicht veränderbar?
Java:interface ContainerObject {} class Container { ContainerObject aufnahme; // Aufnahme nur für ClassA, ClassB, ClassC nicht ClassD } class ClassA implements ContainerObject { .... } class ClassB implements ContainerObject { .... } class ClassC implements ContainerObject { .... } class ClassD { .... }
Das macht aber die spätere Verwendung auch nicht leichter...
EDIT: Aber was hat das eigentlich mit equals() und hashCode() zu tun?
Nun leider sieht es W3C anders. Für die HTML Canvas gibt es ein fillStyle / strokestyle, welches wahlweise Farbe, Gradient oder Image sein kann.Wie kommt man zu so einem Konstrukt?
Also ich finde es zumindest seltsam und ich frage mich gerade, was für Operationen du darauf machen willst / musst....
Du kannst da 3 Setter und 3 Getter bauen. Dann kannst du dank polymorphie nur die drei erlaubten Dinge zuweisen. Getter ist aber blöd, da hast du dann ggf 3 unterschiedliche Namen....
Aber da würde ich erst einmal das Design in Frage stellen / hinterfragen ....
Ne, das widerspricht der Aussage von @JustNobody nicht 🙂Nun leider sieht es W3C anders. Für die HTML Canvas gibt es ein fillStyle / strokestyle, welches wahlweise Farbe, Gradient oder Image sein kann.
Aber equals und hash hat doch jedes Objekt, was war denn die Idee dahinter, wie es damit eingeschränkt werden soll?Das hatte ich auch vor. Deshalb kam ich darauf, ob equals, hash, clone funktion basiert. Momentan habe ich ein "abstrakt" Interface um diese Klassen kenntlich zu machen.
Gibt es eigentlich in Java ein vordefiniertes Interface, was kenntlich macht, dass eine Klasse über die Methoden equals und hashCode verfügt?
Das Problem ist dann doch eher, dass java.lang.Object bereits die Methoden equals()/hashCode() implementiert, und nicht, dass es kein solches Interface gibt (bzw. geben kann). Die blosse Existenz einer "eigenen" equals()/hashCode() Implementierungsmethode sagt ja nichts darüber aus, wie diese implementiert ist:Leider nein, habe ich mir auch schon oft gewünscht. Das Fehlen eines solchen Interface ist nach meiner Meinung ein Geburtsfehler von Java.
public class MyOwnClass implements WithHashCodeAndEquals {
public int hashCode() {
return super.hashCode();
}
public boolean equals(Object o) {
return super.equals(o);
}
}