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;
}
}
如果我有上面的類,我可以使用反射來列出由getters和setters定義的屬性?我試過下面的方法,但它不起作用,Field[] fields
被留空。我知道我可以在.Net中做到這一點,但Java是一個非常不同的動物。我完全吠叫了錯誤的樹嗎?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;
}
也 getter和setter方法也許邪惡的,我應該只是下降呢?
謝謝zacheusz。這將起作用,但它會列出所有的私人領域,而不僅僅是獲得者和制定者公開的領域。實際上,我的班級將會有更多的_name和_bar。 – Phil
如果你想要getter和setter,你必須通過'getDeclaredMethods'獲取方法。我建議使用[BeanUtils](http://commons.apache.org/beanutils/)來代替;)它可能更好,例如在Java中getters for boolean可以以'is'和'get'開頭。 – zacheusz
這些似乎是最可行的,它實際上是dalvik vm,不幸的是Introspector是不可用的(否則我會去那個)。 – Phil