Ich muss testen, ob eine Instanz genau von einem bestimmten Typ ist. Aber es scheint, dass instanceof auch true zurückgibt, wenn der Subtyp auf den Supertyp getestet wird (Fall 3). Ich habe das vorher nie gewusst und bin ziemlich überrascht. Mache ich hier etwas falsch? Wie kann ich einen bestimmten Typ genau testen?Java-Instanz von: Supertypen und Subtypen scheinen gleich zu sein? Wie man genau auf Typ prüft?
//..
class DataSourceEmailAttachment extends EmailAttachment
//...
EmailAttachment emailAttachment = new EmailAttachment();
DataSourceEmailAttachment emailAttachmentDS = new DataSourceEmailAttachment();
if (emailAttachment instanceof EmailAttachment){
System.out.println(" 1");
}
if (emailAttachment instanceof DataSourceEmailAttachment){
System.out.println(" 2");
}
if (emailAttachmentDS instanceof EmailAttachment){
System.out.println(" 3 ");
}
if (emailAttachmentDS instanceof DataSourceEmailAttachment){
System.out.println(" 4");
}
ERGEBNIS:
1
3
4
Ich will Fall vermeiden 3, I "exakte Treffer" wollen nur (Fall 1 und 4), wie teste ich für sie?
@jens: in der Regel Dinge wie * getClass() * und * Instanceof * (außer in der * gleich * Methode) sind riesig Codegeruch (es sei denn, Sie einige Rahmen sind zu schreiben). Polymorphismus kann sehr wahrscheinlich verwendet werden, um das zu tun, was Sie denken, indem Sie * getClass() * und/oder * instanceof * verwenden. – SyntaxT3rr0r