2010-03-14 3 views
6

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?

+3

@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

Antwort

17
if(emailAttachment.getClass().equals(EmailAttachment.class))
+0

Hallo Marcos. Danke, ich habe viel gelernt! Mir war nie bewusst, dass ich Klassen testen muss, wenn ich genaue Übereinstimmungen benötige. Vielen Dank! – jens

Verwandte Themen