Java 反射 - 列出类的属性(getter 和 setter)

标签 java android reflection

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/

相关文章:

java - 如何使用 Rcaller 将数据库表从 java 转移到 R?

android - Android studio for Mac OSX 10.7.5 版本

android - getSherlockActivity() 与 getActivity()

c# - 反射(reflect)接口(interface)的所有属性,包括继承的属性?

java - 使用 `equals` 进行不同单位的长度比较是不是不好?

使用 fork-join 进行 Java 多路树搜索

java - 无法解析符号 BeaconManager V3

android - 在 Androidx 上使用 registerForActivityResult 选择文件

java - 使用反射设置和获取的性能

java - bean 属性的类型如何为空?