public class foo
{
private String _name;
private String _bar;
public String getName() {
return _name;
}
public void setName(String name) {
_name = name;
}
public String getBar() {
return _bar;
}
public void setBarn(String bar) {
_bar = bar;
}
}
如果我有上面的类,我可以使用反射来列出由 getter 和 setter 定义的属性吗?我尝试了下面的方法,但它不起作用,Field[] fields
留空。我知道我可以在 .Net 中做到这一点,但 Java 是一种非常不同的动物。我是不是找错人了?
private HashMap<String, String> getHashMap(Object obj) {
HashMap<String, String> map = new HashMap<String, String>();
Class<?> cls = obj.getClass();
Field fields[] = cls.getFields();
for(Field f : fields) {
String name = f.getName();
String value = f.get(obj).toString();
map.put(name, value);
}
return map;
}
另外 setter 和 getter 可能是邪恶的,我应该放弃这个吗?
最佳答案
也许使用 cls.getDeclaredFields
代替? (和 f.setAccessible(true)
在获取私有(private)字段之前)。
如果您需要 getter 和 setter,您必须通过 getDeclaredMethods
获取方法。然后我建议使用 BeanUtils而不是编写自己的反射逻辑 :)(恕我直言,不太方便的是 java.beans.Introspector)。
关于Java 反射 - 列出类的属性(getter 和 setter),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6800341/