2012-02-20 2 views
7

사람은 CodeModel을 사용하여 다음과 같은 일반적인 방법 선언을 생성하기 위해 알고 있나요 :일 CodeModel은 일반적인 방법

public <T> T getValue(Class<T> clazz){...} 

사용 :

ValueType value = getValue(ValueType.class); 

는 기존 implmentation에 의해 처리되지 않는 것 같습니다.

나는 다음과 같이 내가 코드를 처리 할 수 ​​알지만, 그것은 캐스트가 필요합니다

public Object getValue(Class class){...} 

사용 :

ValueType value = (ValueType)getValue(ValueType.class); 

은 분명히이 때문에 캐스트의 조금 지저분한이다.

+0

흥미로운 점은 http://java.net/jira/browse/CODEMODEL-4에서이 문제점에 대한 버그 보고서를 발견했기 때문입니다. 게다가, 최근에 댓글을 달았습니다. –

답변

11

Object 반환 형식으로 메서드를 만들고 메서드를 생성 한 다음 반환 형식을 덮어 씁니다.

final JDefinedClass exampleClass = codeModel._class("com.example.ExampleClass"); 
final JMethod method = exampleClass.method(JMod.PUBLIC, Object.class, "getValue"); 
final JTypeVar t = method.generify("T"); 
method.type(t); 
method.param(codeModel.ref(Class.class).narrow(t), "type"); 
method.body()._return(JExpr._null()); 
+0

이것은 매력처럼 작동합니다. 올바른 길로 나를 설정해 주셔서 고맙습니다. 나는 언급 된 jira 문제를 자유롭게 업데이트했습니다. –