Tengo una clase y quiero encontrar todas sus variables públicas (no funciones). ¿como lo puedo hacer? gracias!java: obtener todos los nombres de variables en una clase
Respuesta
Field[] fields = YourClassName.class.getFields();
devuelve una matriz de todas las variables públicas de la clase.
getFields()
devuelve los campos en toda la jerarquía de clases. Si usted quiere tener los campos definidos sólo en la clase en cuestión, y no sus superclases, utilice getDeclaredFields()
, y filtrar los public
queridos con la Modifier
enfoque siguiente:
Modifier.isPublic(field.getModifiers());
El YourClassName.class
literal representa en realidad un objeto de tipo java.lang.Class
. Verifique sus documentos para obtener métodos de reflexión más interesantes.
La clase anterior Field
es java.lang.reflect.Field
. Puede echar un vistazo a todo el paquete java.lang.reflect
.
https://docs.oracle.com/javase/tutorial/reflect/class/classMembers.html. También tiene gráficos para localizar métodos y constructores.
Como se ha mencionado por algunos usuarios, por debajo de código puede ayudar a encontrar todos los campos de una clase dada.
TestClass testObject= new TestClass().getClass();
Method[] methods = testObject.getMethods();
for (Method method:methods)
{
String name=method.getName();
if(name.startsWith("get"))
{
System.out.println(name.substring(3));
}else if(name.startsWith("is"))
{
System.out.println(name.substring(2));
}
}
Sin embargo, un enfoque más interesante es continuación:
Con la ayuda de la biblioteca Jackson, yo era capaz de encontrar todas las propiedades de la clase de tipo String/entero/doble, y los valores respectivos en una clase de mapa. (sin utilizar reflexiones API!)
TestClass testObject = new TestClass();
com.fasterxml.jackson.databind.ObjectMapper m = new com.fasterxml.jackson.databind.ObjectMapper();
Map<String,Object> props = m.convertValue(testObject, Map.class);
for(Map.Entry<String, Object> entry : props.entrySet()){
if(entry.getValue() instanceof String || entry.getValue() instanceof Integer || entry.getValue() instanceof Double){
System.out.println(entry.getKey() + "-->" + entry.getValue());
}
}
Puede utilizar cualquiera de los dos en función de sus necesidades:
Field[] fields = ClassName.class.getFields(); // returns inherited members but not private members.
Field[] fields = ClassName.class.getDeclaredFields(); // returns all members including private members but not inherited members.
Para filtrar sólo los campos públicos de la lista anterior (basado en el requisito) el uso por debajo de código:
List<Field> fieldList = Arrays.asList(fields).stream().filter(field -> Modifier.isPublic(field.getModifiers())).collect(
Collectors.toList());
- 1. ¿Cómo obtener todos los nombres de clase en un espacio de nombres en Ruby?
- 2. ¿Cómo obtener todos los nombres de propiedades en una entidad?
- 3. Java: programación determinar todos los nombres de los paquetes cargados en la ruta de clase
- 4. ¿Cómo obtener todos los nombres de propiedad de una clase Groovy?
- 5. Obtener todos los nombres de tabla configurados en SessionFactory
- 6. ¿Todos los programas en Java requieren una clase?
- 7. ¿Puedo obtener todos los métodos de una clase?
- 8. ¿Alguna forma de obtener todos los id (atributos) de todos los elementos de una clase concreta?
- 9. Obtener una lista de todos los cargadores de clase en una JVM
- 10. copie todos los nombres de métodos - Intellij
- 11. jqgrid obtener todos los nombres de columna de grillas
- 12. ini4j - ¿Cómo obtener todos los nombres de las teclas en una configuración?
- 13. Java: ¿cómo obtener todos los subdires recursivamente?
- 14. Obtener los identificadores de todos los objetos en una lista
- 15. ¿Imprimir todos los nombres de métodos de una clase en Ruby?
- 16. Listar todos los nombres de bit de una marca Enum
- 17. PHP: Obtener una lista de todos los nombres de archivo incluidos en mi directorio de imágenes
- 18. ¿Cómo obtener los nombres de los archivos?
- 19. Java anotación devuelve los nombres de clase crípticos
- 20. Obtener todos los __slots__ de la clase derivada
- 21. Acceso a variables de clase heredadas en java
- 22. ¿Cómo obtener todos los elementos por nombre de clase?
- 23. Obtener todos los identificadores de una colección
- 24. ¿Por qué tienen todos los métodos/variables estáticos en una clase no estática?
- 25. Obtener todos los nombres de los archivos en el directorio usando JFileChooser?
- 26. ¿Cómo obtener todos los nombres de tabla de una base de datos?
- 27. SharpSVN leyó TODOS los nombres de archivo
- 28. Java: Obtener las propiedades de una clase para la construcción de una representación de cadena
- 29. ¿Cómo obtener todos los valores enum en Java?
- 30. XSLT: Cómo obtener una lista de todos los espacios de nombres usados
usted debería ser capaz de hacer esto utilizando [API de reflexión] (http://java.sun.com/docs/books/tutorial/reflect/). – Crozin