2012-02-20 8 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の問題を更新する自由を取った。 –

関連する問題