Java instance: supertypes and subtypes seem equal? How to accurately test type?

If an instance completely belongs to a given type, I need to test it However, if the subtype is tested as a supertype, it seems that instanceof also returns true (case 3) I've never known this before. I'm surprised Did I do wrong here? How do I accurately test 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 just want "perfect match" (cases 1 and 4). How can I test them?

Solution

if( emailAttachment.getClass().equals(EmailAttachment.class) )
if( emailAttachment.getClass().equals(EmailAttachment.class) )
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>