sirve settitle que propiedades para java reflection static field

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); } }