java - 如何通过反射获取另一个包的类中静态字段的值

标签 java reflection

如何获取另一个包中静态字段的值?

我需要知道 .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/

相关文章:

c# - 确定反射类型是否可以转换为另一个反射类型

java - 使用java反射提取注释值?

java - 我想在单击按钮时弹出一个窗口。该弹出窗口应包含标签名称。确定按钮 关闭按钮

java - 为什么 logcat 被 GC 信息垃圾邮件?

反射——恢复时间.时间实例

c# - 如何测试一个类型是否是匿名的?

c# - Dotfuscator 中反射错误的解决方法?

java - 替换 Java5 中的 Java6+ Arrays.binarySearch

java - 在违反唯一约束时使用 JPA/Hibernate 和实体更新列

java - 将数据传递给 Android 中的自定义 View