1

SOの質問をたくさん読んだのですが、答えが見つからないようです。

私は次のクラスを持っています:

public class DatabaseStrings {
    public static final String domain = 
        "CREATE TABLE IF NOT EXISTS domain (" +
            "_id INT UNSIGNED, " +
            "account VARCHAR(20) NOT NULL DEFAULT '', " +
            "domain TINYINT(1) DEFAULT 0, " +
            "domain_string VARCHAR(20) DEFAULT '', " +
            "user_id INT UNSIGNED DEFAULT 0" +
        ");";
}

そして他の場所では、私はこれらの文字列にアクセスしようとしています:

for(Field field : DatabaseStrings.class.getDeclaredFields()) {
    field.setAccessible(true); // I don't know if this is necessary, as the members are public

    System.out.println(field.getName());
    System.out.println(field.getType());
    String value = (String) field.get(null); // This line throws an IllegalAccessException inside Eclipse.
    // Do something with value
}

IllegalAccessExceptionが発生するのはなぜですか?field.get行を削除すると、LogCatに次の行が表示されます。

System.out    |    domain
System.out    |    class java.lang.String

参照:

リフレクションを使用してJavaでメンバー変数値を取得する際の落とし穴

リフレクション:リフレクションを介してロードされたクラス内の定数変数

リフレクションを介したJava静的最終ivar値へのアクセス

4

1 に答える 1

4

.get() を try-catch ブロックでラップする必要がありました

String value = null;

try {
    value = (String)field.get(null);
    // Do something with value
} catch (IllegalAccessException e) {
    // Handle exception
}
于 2013-03-09T22:01:22.177 に答える