2017-11-08 1 views
0

別のパッケージで静的フィールドの値を取得するにはどうすればよいですか?他のパッケージのクラス内の静的フィールドの値を反映で取得する方法

私はstringの値が.Rクラスかそれと同等であることを知る必要があります。 私はこのようなものを使用してみてください:

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値を取得する方法は?

+0

をスロー

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

を例外がある "あなたはもう少し具体的に?とにかく反射を使う必要があるのはなぜですか? – Stultuske

+0

@Stultuske、私は詳細を追加しました –

答えて

1

あなたがでクラスの静的フィールドを取得することができます:

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

その後値を取得:それは「IllegalArgumentException, IllegalAccessException, SecurityException, ClassNotFoundException

+0

Unfortunatellyは私のためにうまくいきません: 'W/System.err:java.lang.ClassNotFoundException:com.android.webview.R W/System.err:at java.lang.Class。 classForName(ネイティブメソッド) ' –

関連する問題