注释处理器:如何验证方法返回类型是Map

问题描述 投票:1回答:1

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

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>

java return-type annotation-processing
1个回答
0
投票

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

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
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.