JavaPoet 检查 TypeName 是否是 List 的实例



在JavaPoet中,我可以像这样从每个类中获取一个TypeName作为List类的示例。

TypeName TYPE_LIST = ClassName.get(List.class);

但是,我现在如何检查给定TypeName是否是列表的实例? 假设我有一个返回List<String>的方法。我可以通过以下方式获取返回类型:

TypeName returnTyoe = TypeName.get(method.getReturnType());

如何检查 tis 方法是否List?我不在乎它是否是List<String>我只想知道它是否至少是一个List并完全忽略通用参数。

找到了更好的方法。对于每个也在为此苦苦挣扎的人,请使用以下代码:

TypeName TYPE_LIST = ClassName.get(List.class);
boolean isList = isFromType(type, TYPE_LIST)
public static boolean isFromType(TypeName requestType, TypeName expectedType) {
if(requestType instanceof ParameterizedTypeName) {
TypeName typeName = ((ParameterizedTypeName) requestType).rawType;
return (typeName.equals(expectedType));
}
return false;
}

正如您正确指出的那样,由于类型擦除,您将无法确定它是否是List<String>

如果您只是想检查它是否是List,那么您可以这样做,

return method.getReturnType().contains("java.util.List");

这是我对这个问题的解决方案(非常简单(:

public static boolean isParameterizedType(Class clazz) {
String simpleName = clazz.getSimpleName();
return parameterizedTypeSet.contains(simpleName);
}
private static Set<String> parameterizedTypeSet = new HashSet<>();
static {
parameterizedTypeSet.add("List");
}

相关内容

  • 没有找到相关文章

最新更新