0

我在我的程序中遇到了 IllegalAccessException 问题

这是我的代码

    private static void setdata(Field field, Object dto, Object value) throws IllegalArgumentException, IllegalAccessException {
    boolean accessible = field.isAccessible();
    if (!accessible)
        field.setAccessible(true);
    if (value instanceof java.lang.String) {
        if (value != null) {
            value = String.valueOf(value).trim();
        }
    }
    field.set(dto, value);
    if (accessible)
        field.setAccessible(false);
}

为了防止“IllegalAccessException”,我添加了检查逻辑。

boolean accessible = field.isAccessible();' if (!accessible) field.setAccessible(true);

但有时在我的程序中会发生 IllegalAccessException。

线上引发的异常 - 'field.set(dto, value);'

例外情况如下

java.lang.IllegalAccessException: Class com.comm.util.FileReadUtils can not access a member of class com.dto.myDto with modifiers "private"

起初,我认为“静态”可能是个问题。

但据我所知,静态方法在调用时确实会创建自己的堆栈帧。

所以我一无所获。

请让我知道我做了什么愚蠢的事情~

我的程序在 Spring 3.x 和 java 1.6 上运行

4

1 回答 1

0
public static void setField(Object object, String fieldName, Object fieldValue)
{
    try
    {
        Field field = object.getClass().getDeclaredField(fieldName);
        field.setAccessible(true);
        field.set(object, fieldValue);
    }
    catch(Exception exception)
    {
        // Log error
    }
}

请尝试上面的代码,它应该可以工作(我没有编译这个,如果有的话检查语法错误)你是如何得到 Field 实例的?其中可能存在一些问题

于 2014-04-25T03:10:28.917 回答