Java-通过反射访问公共成员

Java-通过反射访问公共成员,java,reflection,illegalaccessexception,Java,Reflection,Illegalaccessexception,我读了一大堆这样的问题,但我似乎找不到答案 我有以下课程: public class DatabaseStrings { public static final String domain = "CREATE TABLE IF NOT EXISTS domain (" + "_id INT UNSIGNED, " + "account VARCHAR(20) NOT NULL DEFAULT '', " +

我读了一大堆这样的问题,但我似乎找不到答案

我有以下课程:

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
}
为什么我会得到一个非法的AccessException?如果删除field.get行,我可以在LogCat中看到以下行:

System.out    |    domain
System.out    |    class java.lang.String
参考资料:

需要在try-catch块中包装.get()

String value = null;

try {
    value = (String)field.get(null);
    // Do something with value
} catch (IllegalAccessException e) {
    // Handle exception
}
需要在try-catch块中包装.get()

String value = null;

try {
    value = (String)field.get(null);
    // Do something with value
} catch (IllegalAccessException e) {
    // Handle exception
}

您使用的是
SecurityManager
?这个类中还有其他非静态字段(公共或私有)吗?它在Win7 Java7-32bit上运行良好。也
field.setAccessible(true)对于要读取的公共字段不是必需的。1。EclipseIndigo中显示了异常(对不起,应该这样说)。2.所有字段都是公共静态最终字段。请将异常错误添加到您的帖子中,以便我们查看。您是否使用
SecurityManager
?此类中是否有任何其他非静态字段(公共或私有)?在Win7 Java7-32位上对我来说效果很好。也
field.setAccessible(true)对于要读取的公共字段不是必需的。1。EclipseIndigo中显示了异常(对不起,应该这样说)。2.所有字段都是公共静态最终字段。请将异常错误添加到您的帖子中,以便我们查看。因此,您根本没有收到IllegalAccessException。由于未捕获或声明已检查的异常,因此出现编译错误。下次,粘贴您得到的完整准确的错误消息。不要把编译程序和运行程序混为一谈。我想我只是盯着它看太久了。Eclipse给了我一个“未处理的异常类型IllegalAccessException”,我认为它引发了一个异常。我是Java新手,也是Eclipse新手。这是一个诚实的错误,也许可以在问题中得到更好的解释。所以,你根本没有得到非法访问例外。由于未捕获或声明已检查的异常,因此出现编译错误。下次,粘贴您得到的完整准确的错误消息。不要把编译程序和运行程序混为一谈。我想我只是盯着它看太久了。Eclipse给了我一个“未处理的异常类型IllegalAccessException”,我认为它引发了一个异常。我是Java新手,也是Eclipse新手。这是一个诚实的错误,也许可以在问题中得到更好的解释。