java - 这段反射代码有什么错误?

标签 java reflection

我对 Java 的缺乏再次困扰着我。我有以下成员函数:

protected void setData(Map<String, String[]> data) {
    Class thisClass = this.getClass();
    for(Map.Entry<String, String[]> item : data.entrySet()) {
        try {
            Field field = thisClass.getDeclaredField(item.getKey());
            try {
                if(field.getType().getName().equals("java.lang.Long")) {
                    // EXCEPTION HERE!!!
                    field.setLong(this, Long.valueOf(item.getValue()[0]) );
                }...
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        } catch (NoSuchFieldException e) {
            // Skip this field...
            continue;
        }
    }
}

我不断收到 IllegalArgumentException,但我不完全明白为什么。谁能提供一些见解?

该函数采用一个映射,对其进行迭代,并通过检查“this”上是否存在该字段来将值分配给“this”,如果存在,则尝试调用 field.set() .

最佳答案

setLong(..) 尝试设置一个原始值,并且您的字段是 java.lang.Long。对于非基元,始终使用 set(..) 方法。对于基元 getType().getName() 将返回 intlong 等。

初始答案:您需要使该字段可访问:field.setAccessible(true)

关于java - 这段反射代码有什么错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6835391/

相关文章:

java - 如何在代码生成的注释处理期间检索注释的类类型?

java - 快速编辑私有(private)变量

.net - 如何使用反射在 C# 文件中创建 List<T> 实例

java - Swing 鼠标进入奇怪的行为

java - Spring Security 不会将 HTTP 重定向到 HTTPS

Java PrintWriter 未写入 javafx 中的文件

c# - Visual Studio 专用访问器和 checkin 代码

java - Bauerca drag-sort-listview 简单示例

java - newFixedThreadPool 创建了超出需要的任务

c# - 无法在运行时从程序集中获取方法