如何获取另一个包中静态字段的值?
我需要知道 .R
类或类似类的 string
值。
我尝试使用这样的东西:
Class.forName("com.notmypackage.R$string").getDeclaredFields();
或者详细情况:
for (Field field : Class.forName("com.android.webview.R$string").getDeclaredFields()) {
}
但没有成功,出现异常:
11-08 10:02:38.038 4983-4983/com.mypack W/System.err: java.lang.ClassNotFoundException: com.android.webview.R$string
11-08 10:02:38.038 4983-4983/com.mypack W/System.err: at java.lang.Class.classForName(Native Method)
11-08 10:02:38.038 4983-4983/com.mypack W/System.err: at java.lang.Class.forName(Class.java:309)
11-08 10:02:38.038 4983-4983/com.mypack W/System.err: at java.lang.Class.forName(Class.java:273)
有什么方法可以获取外星***.R$string
值吗?
最佳答案
您可以通过以下方式获取类的静态字段:
Field[] fields= Class.forName("com.android.webview.R").getDeclaredFields();
List<Field> staticFields = new ArrayList<Field>();
for (Field field : fields) {
if (java.lang.reflect.Modifier.isStatic(field.getModifiers())) {
// if you want to get String fields, check this
// field.getType().equals(String.class)
staticFields.add(field);
}
}
或指定字段名称:
Field field= Class.forName("com.android.webview.R").getDeclaredField("field");
然后获取值:
System.out.println(field.get(null));
它抛出IllegalArgumentException、IllegalAccessException、SecurityException、ClassNotFoundException
关于java - 如何通过反射获取另一个包的类中静态字段的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47175961/