2010-03-14 16 views
6

Necesito probar, si una instancia es exactamente de un tipo dado. Pero parece que la instancia de devuelve verdadero también si el subtipo se prueba para el supertipo (caso 3). Nunca supe esto antes y estoy bastante sorprendido. ¿Estoy haciendo algo mal aquí? ¿Cómo pruebo exactamente para un tipo dado?Instancia de Java de: ¿Supertipos y subtipos parecen ser iguales? ¿Cómo probar exactamente el tipo?

//.. 

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

RESULTADO:

1 
3 
4 

quiero evitar el caso 3, sólo quiero "coincidencias exactas" (caso 1 y 4) ¿Cómo se prueba para ellos?

+3

@jens: generalmente cosas como * getClass() * y * instanceof * (además en el método * equals *) tienen un gran olor a código (a menos que esté escribiendo algún framework). El polimorfismo se puede usar para hacer lo que crees que debes hacer con * getClass() * y/o * instanceof *. – SyntaxT3rr0r

Respuesta

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

Hola marcos. Gracias, ¡aprendí mucho! Nunca fui consciente de que tengo que probar las clases si necesito coincidencias exactas. ¡Gracias! – jens

Cuestiones relacionadas