2017-11-08 6 views
0

다른 패키지에서 정적 필드의 값을 어떻게 얻을 수 있습니까?리플렉션을 통해 다른 패키지 클래스의 정적 필드 값을 얻는 방법

string 값이 .R이거나 이와 비슷한 값이 필요합니다. ,

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

하지만 아무도 성공을 얻었다 예외 :

Class.forName("com.notmypackage.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); 
    } 
} 

또는 필드 이름을 지정합니다 :

+0

IllegalArgumentException, IllegalAccessException, SecurityException, ClassNotFoundException을 던졌습니다 " 예외가 생겼어. " 좀 더 구체적으로? 어쨌든 반성을 사용해야하는 이유는 무엇입니까? – Stultuske

+0

@Stultuske, 더 자세한 내용을 추가했습니다. –

답변

1

다음과 같은 방법으로 클래스의 정적 필드를 얻을 수

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

그런 얻을 값 :

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

그것은

+0

Unfortunatelly 지금은 작동하지 않습니다. 'W/System.err : java.lang.ClassNotFoundException : com.android.webview.R W/System.err : at java.lang.Class. classForName (네이티브 메소드) ' –