Si tengo una tipo de actividad llamada TestActivity en mi solicitud, ¿hay una manera de conseguir su clase por su nombre como en este ejemplo:clase por su nombre
Class<?> c = getClassByName("TestActivity");
Si tengo una tipo de actividad llamada TestActivity en mi solicitud, ¿hay una manera de conseguir su clase por su nombre como en este ejemplo:clase por su nombre
Class<?> c = getClassByName("TestActivity");
uso forName lugar ..
algo como esto ..
try {
Class<?> act = Class.forName("com.bla.TestActivity");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
También tienes que dar el nombre completo del paquete. por ejemplo: com.bla.TestActivity como argumento para Class.forName – Richie
¿Puedes hacer algo para recibir 'Class extiende SomeClass> '? – Gobliins
@Gobliins No, el compilador no puede garantizar el tipo de clase que va a obtener, por lo que le otorga una Clase >. Si sabes qué tipo de clase vas a tener, deberás lanzarla (incluso así, recibes advertencias de lanzamiento sin marcar porque el lanzamiento no es seguro). – Dylanthepiguy
El Class.forName parece tener excepciones en él. Esto es solo para ampliar lo anterior para abordar este problema.
try { t = Class.forName("com.package.classname"); } catch (Exception ignored){}
La manera habitual de SO de responder así sería ** editar ** su respuesta. Aunque como las excepciones son abundantes en Java (y su código simplemente lo ignora), un ** comentario ** sería suficiente para abordarlo. – crazyhatfish
@crazyhatfish - Parece que Patrick puede no haber tenido los privilegios para hacer algo útil _except_ publicar su propia respuesta. – amess
@amess Vaya, tiene razón, olvidé que los comentarios necesitan representante. Gracias por corregirme. – crazyhatfish
Puede utilizar Class::forName
para obtener un objeto de clase de tipo desconocido. Si desea obtener una clase con tipo, puede utilizar Class::asSubclass
en la clase devuelta por Class::forName
:
Class<? extends Activity> activityClass = Class.forName("com.example.TestActivity")
.asSubclass(Activity.class);
Por supuesto, también tendrá que manejar un montón de diferentes tipos de excepciones. Como es habitual cuando se trata de la reflexión.
Puede que no sea la respuesta más relevante para su pregunta, pero en general es malo codificar literales de nombre de clase como cadenas. Podría ser mejor usar
Class<?> act = TestActivity.class;
sintaxis.
Por favor, selecciona la respuesta correcta y cierra la publicación –