JavaPoet 检查 TypeName 是否是 List 的实例
JavaPoet check if TypeName is instance of List
在 JavaPoet 中,我可以像这样从每个 Class 中获取一个 TypeName 作为 List
class.
的示例
TypeName TYPE_LIST = ClassName.get(List.class);
但是我现在如何检查给定的 TypeName
是否是列表的实例?假设我有一个 return 是 List<String>
的方法。我可以通过使用获得 return 类型:
TypeName returnTyoe = TypeName.get(method.getReturnType());
如何检查此方法是否返回 List
?我不在乎它是否是 List<String>
我只想知道它是否至少是 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");
}
正如您正确指出的那样,由于 type erasure.
,您无法判断它是否是 List<String>
如果你只是想检查它是否是 List
那么你可以这样做,
return method.getReturnType().contains("java.util.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;
}
在 JavaPoet 中,我可以像这样从每个 Class 中获取一个 TypeName 作为 List
class.
TypeName TYPE_LIST = ClassName.get(List.class);
但是我现在如何检查给定的 TypeName
是否是列表的实例?假设我有一个 return 是 List<String>
的方法。我可以通过使用获得 return 类型:
TypeName returnTyoe = TypeName.get(method.getReturnType());
如何检查此方法是否返回 List
?我不在乎它是否是 List<String>
我只想知道它是否至少是 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");
}
正如您正确指出的那样,由于 type erasure.
,您无法判断它是否是List<String>
如果你只是想检查它是否是 List
那么你可以这样做,
return method.getReturnType().contains("java.util.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;
}