2010-02-10 8 views
13

estoy usando la reflexión para construir una clase (ConfigBuilder) que toma un archivo como argumento:java: Llamada sin marcar para getConstructor (java.lang.Class <?> ...)

Class myClassType = Class.forName(className); 
Class[] types = new Class[] { File.class }; 
Constructor cons = myClassType.getConstructor(types); 
Object[] constructorArgs = new Object[] { myFile }; 
cb = (ConfigBuilder) cons.newInstance(constructorArgs); 

pero me da esta advertencia :

warning: [unchecked] unchecked call to getConstructor(java.lang.Class<?>...) as a member of the raw type java.lang.Class 
Constructor cons = myClassType.getConstructor(types); 

Obviamente, parece que getConstructor espera un tipo genérico por lo que intentó hacer algo como:

Class<?>[] types = new Class<?>[] { File.class }; 

pero recibo el mismo mensaje de advertencia

¿Alguna idea?

David

Respuesta

16

La advertencia se refiere en realidad a myClassType. Necesita parametrizarlo (y el cons) también.

Class<?> myClassType = Class.forName(className); 
Class<?>[] types = new Class[] { File.class }; 
Constructor<?> cons = myClassType.getConstructor(types); 
+0

Esto funciona muy bien, simplemente añadiendo también que se puede usar 'Clase myClassType = SpecificClass.class;' En mi circunstancia. – Ashitakalax

6

En primer lugar esto es sólo una advertencia y no debe causar alarma indebida cuando se trabaja con la reflexión y tipos que son desconocidas en tiempo de compilación. La virtud de los genéricos es la comprobación de tipo de tiempo de compilación más fuerte y todo lo que sale por la ventana una vez que llame al Class.forName(className).

Sin embargo, si usted es como la mayoría de las personas (incluyéndome a mí), entonces probablemente quiera deshacerse de la advertencia para que no continúe llamando su atención innecesariamente. Para ello se puede parametrizar la variable constructor cons:

Class<?> myClassType = Class.forName(className); 
Class<?>[] types = new Class[] { File.class }; 
Constructor<?> cons = myClassType.getConstructor(types); 
Cuestiones relacionadas