java:获取类中的所有variables名称

我有一个类,我想find它的所有公共variables(不是函数)。 我怎么能这样做? 谢谢!

Field[] fields = YourClassName.class.getFields(); 

返回该类的所有公共variables的数组。

getFields()返回整个类中的字段 – heirarcy。 如果只想在所讨论的类中定义字段,而不是其超类,则使用getDeclaredFields() ,并使用下面的Modifier方法过滤public字段:

 Modifier.isPublic(field.getModifiers()); 

YourClassName.class文字实际上表示一个java.lang.Classtypes的对象。 检查其文档更有趣的reflection方法。

上面的Field类是java.lang.reflect.Field 。 你可以看看整个java.lang.reflect包。

https://docs.oracle.com/javase/tutorial/reflect/class/classMembers.html 。 也有查找方法和构造函数的图表。

在这里输入图像说明

如less数用户所述,以下代码可以帮助查找给定类中的所有字段。

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

但是更有趣的方法如下:

在Jackson库的帮助下,我能够findString / integer / doubletypes的所有类属性以及Map类中的相应值。 ( 不使用reflectionAPI!

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

你可以根据你的需要使用这两者中的任何一个:

 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. 

要仅从上面的列表中过滤公共字段(根据要求),请使用以下代码:

 List<Field> fieldList = Arrays.asList(fields).stream().filter(field -> Modifier.isPublic(field.getModifiers())).collect( Collectors.toList());