una subclases saber polimorfismo objeto instancia getclass ejemplo como clase java subclass instanceof

subclases - reflection java 8



¿Cómo verificar si una subclase es una instancia de una clase en tiempo de ejecución? (7)

Debes leer la API cuidadosamente para estos métodos. A veces puedes confundirte muy fácilmente.

Es o bien:

if (B.class.isInstance(view))

La API dice: Determina si el Objeto especificado (el parámetro) es compatible con la asignación del objeto representado por esta Clase (El objeto de clase al que está llamando el método)

o:

if (B.class.isAssignableFrom(view.getClass()))

La API dice: Determina si la clase o interfaz representada por este objeto de clase es la misma, o es una superclase o superinterfaz de, la clase o interfaz representada por el parámetro de clase especificado

o (sin reflexión y el recomendado):

if (view instanceof B)

Esta pregunta ya tiene una respuesta aquí:

En una suite de prueba de aplicaciones para Android, tengo una clase como esta, donde B es una vista:

public class A extends B { ... etc... }

ahora tengo una lista de objetos de vista que pueden contener objetos A , pero en este caso solo me importa si son subclases o "instancias de" B Me gustaría hacer algo como:

ArrayList<View> viewList = getViews(); Iterator<View> iterator = viewList.iterator(); while (iterator.hasNext() && viewList != null) { View view = iterator.next(); if (view.getClass().isInstance(B.class)) { // this is an instance of B } }

El problema es que cuando el if encuentra un objeto A no lo evalúa como una "instancia de B ". ¿Hay alguna manera de hacer isSubclassOf o algo así?


Es al revés: B.class.isInstance(view)


Nunca he usado esto, pero pruebo view.getClass().getGenericSuperclass()


Si hay un polimorfismo, como comprobar SQLRecoverableException vs SQLException, se puede hacer así.

try { // sth may throw exception .... } catch (Exception e) { if(SQLException.class.isAssignableFrom(e.getCause().getClass())) { // do sth System.out.println("SQLException occurs!"); } }

Simplemente di,

ChildClass child= new ChildClass(); if(ParentClass.class.isAssignableFrom(child.getClass())) { // do sth ... }


Tal vez me esté perdiendo algo, pero ¿no sería suficiente?

if (view instanceof B) { // this view is an instance of B }



if(view instanceof B)

Esto devolverá true si view es una instancia de B o la subclase A (o cualquier subclase de B para ese caso).