Tapa Save
Tapa Save

Reputation: 4857

How get value of static field in another package's class via reflection

How I can get value of static field in another package?

I need know string values of .R class or similar. I try use something like this:

Class.forName("com.notmypackage.R$string").getDeclaredFields();

or in detailed case:

for (Field field : Class.forName("com.android.webview.R$string").getDeclaredFields()) {
}

but none success, got exception:

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)

There any way to get alien ***.R$string values?

Upvotes: 0

Views: 1143

Answers (1)

Nam Tran
Nam Tran

Reputation: 661

You can get static fields of class by:

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);
    }
}

Or specify field name:

Field field= Class.forName("com.android.webview.R").getDeclaredField("field");

Then get value:

System.out.println(field.get(null));

It throws IllegalArgumentException, IllegalAccessException, SecurityException, ClassNotFoundException

Upvotes: 1

Related Questions