No hay soporte lingüístico para hacer lo que está pidiendo.
Puede acceder de forma reflexiva a los miembros de un tipo en tiempo de ejecución utilizando la reflexión (por ejemplo, con Class.getDeclaredFields()
para obtener una matriz de Field
), pero dependiendo de lo que esté intentando hacer, esta puede no ser la mejor solución.
Ver también
Preguntas relacionadas
Ejemplo
Aquí hay un ejemplo simple para mostrar solo algo de lo que la reflexión es capaz de hacer.
import java.lang.reflect.*;
public class DumpFields {
public static void main(String[] args) {
inspect(String.class);
}
static <T> void inspect(Class<T> klazz) {
Field[] fields = klazz.getDeclaredFields();
System.out.printf("%d fields:%n", fields.length);
for (Field field : fields) {
System.out.printf("%s %s %s%n",
Modifier.toString(field.getModifiers()),
field.getType().getSimpleName(),
field.getName()
);
}
}
}
El fragmento anterior utiliza la reflexión para inspeccionar todos los campos declarados de class String
; produce la siguiente salida:
7 fields:
private final char[] value
private final int offset
private final int count
private int hash
private static final long serialVersionUID
private static final ObjectStreamField[] serialPersistentFields
public static final Comparator CASE_INSENSITIVE_ORDER
Effective Java 2nd Edition, Item 53: Preferir interfaces a la reflexión
Estos son extractos del libro:
Dado un Class
objeto, puede obtener Constructor
, Method
y las Field
instancias que representan los constructores, métodos y campos de la clase. [Ellos] le permiten manipular reflexivamente a sus contrapartes subyacentes . Este poder, sin embargo, tiene un precio:
- Pierde todos los beneficios de la verificación en tiempo de compilación.
- El código requerido para realizar el acceso reflexivo es torpe y detallado.
- El rendimiento sufre.
Como regla general, no se debe acceder a los objetos de forma reflexiva en aplicaciones normales en tiempo de ejecución.
Hay algunas aplicaciones sofisticadas que requieren reflexión. Los ejemplos incluyen [... omitido a propósito ...] Si tiene alguna duda sobre si su aplicación cae en una de estas categorías, probablemente no lo haga.