2010-03-14 11 views
6

Bir örnek tam olarak verilen bir türse, sınamalıyım. Ancak, alt türün süper tip (durum 3) için test edilmesi durumunda, instanceof'in de doğru olduğu anlaşılmaktadır. Bunu daha önce hiç bilmiyordum ve çok şaşırdım. Burada yanlış bir şey mi yapıyorum? Belirli bir tür için tam olarak nasıl test ederim?Java Örnek: Supertypes ve Subtipler eşit görünüyor mu? Tip için tam olarak nasıl test edilir?

//.. 

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

SONUÇ: Ben sadece "tam eşleme" istemek (olgu 1 ve 4) onlar için nasıl test ederim

1 
3 
4 

Davayı 3 önlemek istiyorsanız,?

+3

@jens: (bazı çerçeve yazıyoruz sürece) * getClass() * ve * instanceof * (yöntemiyle * * eşittir içinde yanı sıra) gibi genellikle şeyler kocaman kod koku vardır. Polymorphism muhtemelen * getClass() * ve/veya * instanceof * kullanarak yapman gerektiğini düşündüğünüz şeyi yapmak için kullanılabilir. – SyntaxT3rr0r

cevap

17
if(emailAttachment.getClass().equals(EmailAttachment.class))
+0

Merhaba marcos. Teşekkürler, çok şey öğrendim! Kesin maçlara ihtiyacım varsa dersleri test etmem gerektiğini asla bilemedim. Teşekkürler! – jens

İlgili konular