2012-02-20 41 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

有趣的是,剛剛發現了一個提到這個問題的bug報告:http://java.net/jira/browse/CODEMODEL-4。另外,最近這個評論。 – 2012-02-20 16:53:28

回答

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問題。 – 2012-05-01 02:53:49