如何获取getter和setter中使用的Java对象的所有私有属性的列表。我试过PropertyUtils
和MethodUtils
,但没有运气。现在我正在尝试使用Class对象的getDeclaredFields()
,它返回一个Field对象列表,然后检查这是否是私有属性是一种方法?或者有更好的解决方案。
答案 0 :(得分:1)
你说的话,或者yourBean.getClass().getMethods()
然后在返回的每个方法上method.getName().startsWith("get")
。
我可以问你为什么需要这样做吗?
答案 1 :(得分:1)
您可以查找所有的getter和setter,并查看是否有匹配的字段。但是字段可以从_fieldName
或m_fieldName
开始。您只能推断出getter / setter与字段有关。
答案 2 :(得分:0)
我这样做:
private Set<String> getModelProperties(Class<T> cls) {
Set<String> properties = new HashSet<String>();
for (Method method : cls.getDeclaredMethods()) {
String methodName = method.getName();
if (methodName.startsWith("set")) {
properties.add(Character.toLowerCase(
methodName.charAt(0)) + methodName.substring(3));
}
}
return properties;
}
答案 3 :(得分:0)
这是一个很老的问题,但我会在这里为新的搜索提供答案。
使用@highlycaffeinated提供的方法:https://stackoverflow.com/a/6796254/776860
您可以通过一些更改轻松找到所需的解决方案。
public List<String> getMap(Object o) throws IllegalArgumentException, IllegalAccessException {
List<String> result = new ArrayList<String>();
Field[] declaredFields = o.getClass().getDeclaredFields();
for (Field field : declaredFields) {
if(!field.isAccessible()) {
result.add(field.getName());
}
}
return result;
}
public Map<String, Object> getMap(Object o) throws IllegalArgumentException, IllegalAccessException {
Map<String, Object> result = new HashMap<String, Object>();
Field[] declaredFields = o.getClass().getDeclaredFields();
for (Field field : declaredFields) {
field.setAccessible(true);
result.put(field.getName(), field.get(o));
}
}
return result;
}
正如@highlycaffeinated一样,只提供额外的行field.setAccessible(true);
,这样您就可以内省private
字段。