2012-02-20 24 views
7

kimse CodeModel kullanarak aşağıdaki jenerik yöntem beyanı oluşturmak için biliyor mu:Güneş CodeModel jenerik yöntem

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

kullanımı:

ValueType value = getValue(ValueType.class); 

mevcut implmentation tarafından ele alınması için değil görünüyor.

ben şöyle ben kodu ele verebilir biliyorum, ama bir döküm gerektirir:

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

kullanımı:

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

Açıkçası bu, çünkü döküm biraz dağınık.

+0

İlginç, sadece bu sorundan söz eden bir hata raporu bulundu: http://java.net/jira/browse/CODEMODEL-4. Artı, bu son zamanlarda yorumlandı. –

cevap

11

Yöntemi, Object döndürme türüyle oluşturun, yöntemi yeniden yazın, sonra dönüş türünün üzerine yazın.

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

Bu bir çekicilik gibi çalışır. Beni doğru yola koyduğun için çok teşekkür ederim. Başvurulan jira sorununu güncelleme özgürlüğünü aldım. –