【发布时间】:2011-11-10 22:50:34
【问题描述】:
如何获取 getter 和 setter 中使用的 Java 对象的所有私有属性的列表。我试过PropertyUtils 和MethodUtils 但没有运气。现在我正在尝试使用 Class 对象的getDeclaredFields(),它返回给我一个 Field 对象列表,然后检查它是否是私有属性,这是一种方法吗?或者有没有更好的解决方案。
【问题讨论】:
标签: java reflection
如何获取 getter 和 setter 中使用的 Java 对象的所有私有属性的列表。我试过PropertyUtils 和MethodUtils 但没有运气。现在我正在尝试使用 Class 对象的getDeclaredFields(),它返回给我一个 Field 对象列表,然后检查它是否是私有属性,这是一种方法吗?或者有没有更好的解决方案。
【问题讨论】:
标签: java reflection
你说的,或者yourBean.getClass().getMethods()
然后 method.getName().startsWith("get") 在每个返回的方法上。
请问您为什么需要这样做?
【讨论】:
您可以查找所有的 getter 和 setter,看看是否有匹配的字段。但是字段可以以_fieldName 或m_fieldName 开头,您只能推断getter/setter 与字段有关。
【讨论】:
这是一个很老的问题帖子,但为了新的搜索,我会在这里提供一个答案。
在这里使用@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 字段。
【讨论】:
我正在这样做:
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;
}
【讨论】: