如何验证方法的返回类型是带有类型参数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>
。
答案 0 :(得分: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
}
}