settitle - textarea java netbeans
Recuperar solo campos estáticos declarados en clase Java (4)
Eso es simple, puede usar Modificador para verificar si un campo es estático o no. Aquí hay un código de muestra para ese tipo de tarea.
public static void printModifiers(Object o) {
Class c = o.getClass();
int m = c.getModifiers();
if (Modifier.isPublic(m))
System.out.println ("public");
if (Modifier.isAbstract(m))
System.out.println ("abstract");
if (Modifier.isFinal(m))
System.out.println ("final");
if(Modifier.isStatic(m){
System.out.println("static");
}
}
Tengo la siguiente clase:
public class Test {
public static int a = 0;
public int b = 1;
}
¿Es posible utilizar la reflexión para obtener una lista de los campos estáticos solamente? Soy consciente de que puedo obtener una matriz de todos los campos con Test.class.getDeclaredFields()
. Pero parece que no hay forma de determinar si una instancia de Field
representa un campo estático o no.
Me encontré con esta pregunta por accidente y sentí que necesitaba una actualización de Java 8 usando streams:
public static List<Field> getStatics(Class<?> clazz) {
List<Field> result;
result = Arrays.stream(clazz.getDeclaredFields())
// filter out the non-static fields
.filter(f -> Modifier.isStatic(f.getModifiers()))
// collect to list
.collect(toList());
return result;
}
Obviamente, esa muestra está un poco embellecida para la legibilidad. De hecho, es probable que lo escriba así:
public static List<Field> getStatics(Class<?> clazz) {
return Arrays.stream(clazz.getDeclaredFields()).filter(f ->
Modifier.isStatic(f.getModifiers())).collect(toList());
}
Puedes hacerlo así:
Field[] declaredFields = Test.class.getDeclaredFields();
List<Field> staticFields = new ArrayList<Field>();
for (Field field : declaredFields) {
if (java.lang.reflect.Modifier.isStatic(field.getModifiers())) {
staticFields.add(field);
}
}
Si puede agregar dependencias de código abierto a su proyecto, también puede usar FieldUtils.readDeclaredStaticField(Test.class,"a")