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 に答える