在JavaPoet中,我可以从每个这样的类中获取TypeName作为List
类的示例。
TypeName TYPE_LIST = ClassName.get(List.class);
但是我现在如何检查给定的TypeName
是否是List的实例?假设我有一个返回List<String>
的方法。我可以使用以下方法获取返回类型:
TypeName returnTyoe = TypeName.get(method.getReturnType());
如何检查tis方法是否催生List
?我不在乎它是否为List<String>
,我只想知道它是否至少为List
,而完全忽略通用参数。
答案 0 :(得分:1)
找到了更好的方法。对于也为此苦苦挣扎的每个人,请使用以下代码:
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;
}
答案 1 :(得分:0)
这是我解决这个问题的方法(非常简单):
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");
}
答案 2 :(得分:0)