Экземпляр Java: супертипы и подтипы кажутся равными? Как проверить именно на Type? - PullRequest
6 голосов
/ 14 марта 2010

Мне нужно проверить, является ли экземпляр именно заданного типа. Но кажется, что instanceof возвращает true также, если подтип проверен на супертип (случай 3). Я никогда не знал этого раньше, и я очень удивлен. Я что-то здесь не так делаю? Как мне точно проверить данный тип?

//..

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

РЕЗУЛЬТАТ:

 1
 3 
 4

Я хочу избежать случая 3 , мне нужны только "точные совпадения" (случаи 1 и 4), как мне проверить их?

1 Ответ

17 голосов
/ 14 марта 2010
if( emailAttachment.getClass().equals(EmailAttachment.class) )
...