2013-06-09 2 views
0

예를 들어, 내 자신의 클래스 중 하나에서 정적 속성을 가져올 필요가 Class1 또는 Class2 (속성 이름은 두 클래스 모두 동일) 사용자 동작을 의존합니다. String 변수에 클래스 이름 만 있습니다. 이 부동산을 얻는 방법?클래스 이름으로 정적 속성을 가져올 수 있습니까?

물론 나는이 할 수 있습니다 :

InfoClass ic; 
if(className.equals("Class1")) { 
    ic=Class1.prop; 
} else if(className.equals("Class2")) { 
    ic=Class2.prop; 
} 

을하지만 그건 너무 좋은 솔루션이 아닌,이를 구현하는 또 다른 방법이 있나요 ... 생각?

+0

소품이 정적 인 경우에만 – Blackbelt

+0

@blackbelt, 예, 소품은 고정적입니다. – BArtWell

+0

그러면 무엇이 문제입니까? – Blackbelt

답변

1

당신은이 작업을 수행 할 수 있지만 코멘트에서 언급 한 바와 같이이 더 적은 깔끔한 현재의 솔루션보다입니다.

Class clazz = Class.forName(qualifiedClassName); 
Field field = clazz.getDeclaredField("prop"); 
ic = (InfoClass)field.get(null); 

그것은 당신이 반사 또는 조건문의 긴 목록을 필요로하지 않는 앱에서 무엇을하고 무엇이든 할 수있는 다른 방법이 있음을 매우 가능성이 높습니다; 그러나 나는 그것이 무엇인지를 알기에 당신의 문제에 대해 충분히 알지 못합니다.

1

사용 반사 :

Class.forName("mypackage.MyClass").getDeclaredField("field").get(null); 
관련 문제