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新手。这是一个诚实的错误,也许可以在问题中得到更好的解释。