views:

63

answers:

1

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?

+6  A: 
if( emailAttachment.getClass().equals(EmailAttachment.class) )
marcos
Hello marcos. Thanks, I learned a lot! I was never aware that I have to test for classes if I need exact matches. Thanks!
jens
@jens I'm glad i could help
marcos