2011-03-30 5 views
7

Estoy intentando construir un cargador de clases genérico. Necesito comprobar las clases que cargué contra un argumento de método para determinar si son de la misma clase.¿Cómo verificar instanceof en un argumento que es un objeto de Clase?

El código en su mayoría explica lo que estoy tratando de hacer.

private static LinkedList<Object> loadObjectsInDirectory(Class class0, File dir) throws ClassNotFoundException { 

      LinkedList<Feature> objects = new LinkedList<Object>(); 

      ClassLoader cl = new GenericClassLoader(); 

      for(String s : dir.list()) { 
       Class class1 = cl.loadClass(s); 
       try { 
        Object x = class1.newInstance(); 
        if (x instanceof (!!! class0 !!!)) { 
         objects.add(x); 
        } 
       } catch (InstantiationException ex) { 
       } catch (IllegalAccessException ex) { 
       } 

      } 

      return objects; 

     } 

¿Cómo se consigue esto?

+2

"kelass" ??!? ¿Por qué la gente tiene que seguir usando ortografías alternativas creativas de "clase", p. "klass", "clazz", en lugar de la simple y menos discordante "class0" o "class1" o "cl" o lo que sea? –

+0

Es persa, bebé. – Bijan

Respuesta

18

Parece que necesita el isAssignableFrom método

if (kelass.isAssignableFrom(klass)) { 
    objects.add(x); 
} 

JavaDoc

Determina si la clase o interfaz representado por este objeto clase es ya sea el mismo que, o es un superclase o superinterfaz de, la clase o interfaz representada por el parámetro de Clase especificado. Devuelve verdadero si es así; de lo contrario, devuelve falso. Si este objeto de clase representa un tipo primitivo, este método devuelve verdadero si el parámetro de clase especificado es exactamente este objeto de clase; de lo contrario, devuelve falso.

Específicamente, este método prueba si el tipo representado por el parámetro Clase especificado se puede convertir al tipo representado por este objeto Clase a través de una conversión de identidad o mediante una conversión de referencia de ampliación. Consulte Especificación del lenguaje Java, secciones 5.1.1 y 5.1.4, para más detalles.

+0

Y, por supuesto, ya no es necesario crear una instancia de la clase para cargarla. –

Cuestiones relacionadas