Java Instance of: Supertypes and Subtypes seem to be equal? How to test exactly for Type?

Posted by jens on Stack Overflow See other posts from Stack Overflow or by jens
Published on 2010-03-14T18:58:23Z Indexed on 2010/03/14 19:15 UTC
Read the original article Hit count: 194

Filed under:
|

I need to test, if an instance is exactly of a given type. But it seems that instanceof returns true also if the subtype is tested for the supertype (case 3). I never knew this before and I am quite surprised. Am I doing something wrong here? How do I exactly test for a given type?

//..

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");
    }

RESULT:

 1
 3 
 4

I want to avoid case 3, I only want "exact matches" (case 1 and 4) how do I test for them?

© Stack Overflow or respective owner

Related posts about java

Related posts about instanceof