注释处理器:如何验证方法返回类型为Map<Foo,Bar>



如何验证方法的返回类型是带有类型参数Foo和Bar的Map?

public Map<Foo, Bar> getValue();
public void verify(ExecutableElement method) {
     TypeMirror returnType = method.getReturnType();
     // how to verify return type is Map<Foo,Bar>
} 

Foo和Bar可以是原始类型,用户定义类型或java类型(在java.*和javax.*包中(。这个问题其实是:如何检查TypeMirror是Map<Foo,Bar>

不确定是否有更简单的方法,但以下有效。

public void verify(ExecutableElement method) {
    DeclaredType declaredMethod = (DeclaredType) method;
    Elements elementUtils = processingEnv.getElementUtils();
    TypeMirror mapType = elementUtils.getTypeElement("java.util.Map").asType();
    TypeMirror typeArg1 = elementUtils.getTypeElement("path.to.Foo").asType();
    TypeMirror typeArg2 = elementUtils.getTypeElement("path.to.Bar").asType();
    boolean equalMainType = declaredMethod.asElement().asType().equals(mapType);
    Iterator<? extends TypeMirror> iterator = declaredMethod.getTypeArguments().iterator();
    boolean typeArgRes1 = iterator.next().equals(typeArg1);
    boolean typeArgRes2 = iterator.next().equals(typeArg2);
    if (equalMainType && typeArgRes1 && typeArgRes2) {
        // Type matches
    }
}

相关内容

最新更新