public static <T> T inCache(T obj) throws ClassNotFoundException {
String[] token = validateCookie(); //gives me to strings
if (token == null)
return null;
if (Cache.get(token[0]) != null) {
if (Cache.get(token[0]).getClass() == Class.forName(token[1])
&& obj.getClass() == Cache.get(token[0]).getClass()) {
T test = (T) Cache.get(token[0]);
return test;
}
}
return null;
}
위의 코드는 완전히 잘못된 것입니다.자바 반사/제네릭
Basicly 나는 이런 식으로 뭔가를 할 :
- 내가 내 함수에서 클래스를 설정합니다. 예를 들어, 난 내 캐시에서 얻을 목적은 내가 이전에 지정한 같은 클래스가있는 경우
inCache<User>();
확인하시기 바랍니다. 클래스가 일치하는 경우
(obj.getClass == User.class)
는 클래스에 객체를 캐스팅하고 돌아갑니다.
return (User)obj
이렇게 사용하고 싶습니다. 클래스 서명으로
User user = inCache<User>();
+1. 조금 정교하게. . . 'T test = (T) ...'대신'T test = clazz.cast (...)'라고 쓰면된다. ([http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#cast(java.lang.Object)](http://docs.oracle.com/javase)를 참조하십시오. /7/docs/api/java/lang/Class.html#cast%28java.lang.Object%29).) – ruakh
@ruakh 'T'에 캐스팅하는 것이 좋을 것입니다. 안 그래야합니까? – Thomas
대단히 감사합니다 :). 이게 내 문제를 해결했습니다 –