2011-03-08 131 views
2

鑑於這兩類得到實際的類型,而不是類型參數時,Java 1.6的註釋處理

public class MyClass extends MyAbstractClass<Cow> { 
    ... 
} 

public abstract class MyAbstractClass<Foo_ extends AbstractFoo> { 
    ... 
    Key<Foo_> foo; 
    ... 
} 

如果我在運行註釋處理器的代碼,我沒有得到我想要的結果。

for (VariableElement fieldElement : ElementFilter.fieldsIn(env.getElementUtils().getAllMembers((TypeElement)entityElement))) { 
    String fieldType = fieldElement.asType().toString(); 
} 

env是一個ProcessingEnvironment。 entityElement是一個元素。 (MyClass)

fieldType設置爲Key<Foo_>

我需要調用什麼來將fieldType設置爲Key<MyClass>

+0

從子類MyClass見過?類MyAbstractClass的一個? – 2011-03-08 08:45:42

回答

2

foo的類型是Foo_,就像它在代碼中一樣。我認爲,而不是Key<MyClass>你的意思是Key<Cow>,因爲那是在那裏使用的類型參數。使用Types工具,就可以得到該字段的類型使用,當你得到的輸出TypeElement正在處理方法getDeclaredType

// these are the types as declared in the source 
System.out.println(fieldElement.asType());  // Key<Foo_> 
System.out.println(t.getSuperclass());   // MyAbstractClass<Cow> 

// extract the type argument of MyAbstractClass 
TypeMirror superClassParameter = ((DeclaredType) t.getSuperclass()).getTypeArguments().get(0); 
System.out.println(superClassParameter);  // Cow 

// use the type argument and the field's type's type element to construct the fields actual type 
DeclaredType fieldType = typeUtils.getDeclaredType(
     (TypeElement) typeUtils.asElement(fieldElement.asType()), superClassParameter); 

System.out.println(fieldType);     // Key<Cow> 
相關問題