2014-01-31 2 views
1

나는 아주 간단한 문제가있다.
java.lang.reflect.Type 유형의 변수가 있고 클래스 또는 열거 형을 보유하고있는 경우이를 위해 두 가지 다른 작업을 수행하려고합니다. 간단하게 .isEnum()을 묻는 것으로 확인할 수 있습니다. 그러나 특정 열거 메서드를 호출하려면이 변수를 열거 형으로 캐스팅해야합니다. 다음은 일러스트레이션을위한 코드입니다. 나는 그것이 sence의 많은하지 않습니다 알고 있지만 단지 캐스트 그림에 대한이 : 나는java.lang.reflect.Type을 enum으로 캐스트하는 방법은 무엇입니까?

(java.lang.Enum myVar).valueOf(enumString); 

또는

(java.lang.Enum<?> myVar).valueOf(enumString); 

처럼 캐스트를 시도

public class TestClass { 
    public static String text = "MySampleTextClass."; 
} 
public enum TestEnum { 
    MySampleText 
} 
public class Tester { 
    public static Object retrieveValue (java.lang.reflect.Type myVar, String enumStringValue) { 
     String enumStringValue = "MySampleText"; 

     // the variable is enum!!! 
     if (myVar.isEnum()) { 
      return (Enum myVar).valueOf(enumStringValue); 
     } 
     // the variable is class!!! 
     else { 
      return myVar.getClass().getSimpleName(); 
     } 
    } 
} 

하지만 그럴 수 없어 작동하게 만들다.

아이디어가 있으십니까?

+1

'Type'에는 isEnum 메소드가 없습니다. 'Class'를 사용하는 것이 더 간단하지 않습니까? – Pshemo

답변

2

는 추상 클래스 Enum에 선언 된 정적 메소드 valueOf 사용

Class clazz = (Class) myVar; 
if (clazz.isEnum()) { 
    return Enum.valueOf(clazz, enumStringValue); 
} 

을하지만 java.lang.reflect.Type 그냥 마커 인터페이스로 ... 클래스에 캐스트가 필요하다. 또한 작동 시키려면 원시 유형 클래스로 형변환해야합니다. 많은 런타임 트랩을 사용할 수 있습니다.

전반적으로 이러한 요구 사항은 매우 부적절합니다. 왜 형식을 모르는 열거 형 값을 검색하기 위해 리플렉션을 사용해야합니까?

+0

캐스팅하기 전에'instanceof'를 사용하여'Class' 객체인지 확인해야합니다. – Powerlord

+0

@Powerlord 나는 일반적으로 Reflection을 사용할 때'of instance'에 대해'Class.isInstance (object) '를 사용하는 것을 선호한다고 생각한다. – asteri

+0

@Powerlord : 네, 맞습니다. 그러나이 코드 스 니펫의 유일한 문제는 아닙니다. 나는 그것을 더 복잡하게하고 싶지 않았다. – Seelenvirtuose

관련 문제