2012-10-03 7 views
6
class A { 
} 

class B extends A { 
} 

class TestType { 
    public static void main(String args[]) { 
     A a = new B(); 
     // I wish to use reference 'a' to check the Reference-Type which is 'A'. 
    } 
} 

¿Es posible? Si no, entonces especifique el motivo.Compruebe el nombre de la clase de la referencia que contiene un objeto en Java

+7

No puede. El tipo estático de las variables locales no se retiene en el bytecode ni en el tiempo de ejecución. (Si se trata de un campo, puede usar el reflejo en la clase que contiene el campo para obtener el tipo del campo). –

+1

@ ChrisJester-Young Debe hacer que la respuesta sea en lugar de un comentario. – Jesper

Respuesta

1

Si llama al a.getClass(), siempre devolverá la instancia de la clase a partir de la cual se creó este objeto. En su caso, es B por lo que le devolverá B.class.

Ahora, si desea llamar al método en a y obtener la clase como A.class, entonces no podrá hacerlo de manera normal.

Una salida se definen en el método A

public static Class<A> getType() { 
     return A.class; 
    } 

y luego se puede llamar a.getType() que es A.class. Estamos haciendo uso del método estático aquí porque no se anulan.

+0

Pero este método necesitaría ser agregado a cada clase por coherencia, entonces cuando se llama a getType se llamaría al método para la clase 'B'. – Ankur

+0

Actualizó la respuesta para hacer uso de métodos estáticos. –

+0

Sí, la solución funcionó. :) Fue una solución muy elegante y simple. – Amber

2

Comprobar el nombre de clase de la referencia con un objeto en Java

No se puede.

  1. No hay tal cosa como 'la referencia sosteniendo un objeto. No podría haber ninguna referencia de este tipo, o podría haber seiscientos montones de ellas.

  2. No se puede obtener desde el interior del objeto que se está reteniendo.

Cuestiones relacionadas