7

インスタンスが正確に特定のタイプであるかどうかをテストする必要があります。しかし、サブタイプがスーパータイプに対してテストされた場合にも、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)だけが必要です。どのようにテストすればよいですか?

4

1 に答える 1

19
if( emailAttachment.getClass().equals(EmailAttachment.class) )
于 2010-03-14T19:03:42.813 に答える