检查如果一个方法的返回是列表<字符串>使用反射

User12322341232142:

我试图让使用反射的方法的返回类型,但是我似乎不能够检查List<String>明确。
我做了一个非常哈克方式:

if (method.getGenericReturnType().getTypeName().equalsIgnoreCase("java.util.List<java.lang.String>"))

这是不是真的是我应该做的,所以我想知道是否有更好的解决方案。

GotoFinal:

method.getGenericReturnType()返回java.lang.reflect.Type正如你可以看到的Javadoc它具有已知亚型的列表:

All Known Subinterfaces:
GenericArrayType, ParameterizedType, TypeVariable<D>, WildcardType

所以,你可以用它来进行一些instanceof检查:

// is it ParameterizedType - so any type like Type<GenericType, OrMoreTypes>
if (!(method.getGenericReturnType() instanceof ParameterizedType)) return false;
ParameterizedType parametrizedReturnType = (ParameterizedType) method.getGenericReturnType();
// raw type is just a class without generic part
if (parametrizedReturnType.getRawType() != List.class) return false;
if (parametrizedReturnType.getActualTypeArguments().length != 1) return false;
Type firstArg = parametrizedReturnType.getActualTypeArguments()[0];
return firstArg == String.class;

注意该类型可能会更加复杂,但仍然与兼容列表,如果你只是想读一些数据,如方法可能有这样的签名ArrayList<? extends String>,然后检查将返回false。如果你想也支持这样的情况下最好使用一些库,例如org.apache.commons.lang3.reflect.TypeUtils.isAssignable因为这样的库允许您创建类型定义的实例(这些图书馆只是有这些接口的自己的实现)和执行更高级的检查等isAssignableisInstance作为可悲Java不提供这样的API。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Javascript反射,使用字符串调用方法

在字符串上使用split方法将返回一个空字符串

如何使用Scala反射获取方法的返回类型字符串?

使用 endswith() 检查一个列表中的字符串是否以另一个列表中的字符串结尾?

如何测试Callable参数是否将使用反射返回字符串?

使用反射和解释器动态解析字符串并在scala中返回函数

使用反射对列表进行排序以按字符串传递成员名称

如何使用字符串函数func startsWith检查字符串列表而不是一个?

C#:使用反射获取名称的字段/属性/方法值(字符串或uint)

Python 3.5.2:检查字符串中的字符形成一个列表,与使用!=进行检查不同

使用反射更改字符串的效果

如果包含逗号,则拆分字符串,否则使用列表理解返回字符串

如果数组中的所有值都为真(字符串)并且其中一个值为假(字符串),如何返回布尔值 true 停止使用 Javascript 进行检查

您如何使用 MongoDB $lookup 返回子字符串,然后使用该子字符串检查另一个集合中的内容

使用字符串方法解析字符串

C# 如果字符串与使用 LINQ 的字符串列表中的任何字符串不同,则返回 true

如果子字符串在列表中,则使用来自另一个 Pandas 列的子字符串创建新列

使用列表<字符串>。任何()找到,如果一个字符串包含以及找到匹配的项目的项目?

编写一个程序,读取一个短字符串和一个较长的字符串,并检查较长的字符串是否以短字符串的字母开头。使用 strncmp

使用一个错位的字符串打印一系列字符串

使用 Javascript 搜索字符串并返回下一个字符串

使用PHP从另一个字符串返回预选单词的字符串

一个文本文件转换为地图<字符串,列表<字符串>>使用lambda

C#:使用LINQ计数另一个列表中的字符串在字符串中的出现?

如何使用一个衬里从字符串中提取特定子字符串

使用python(1)从旧字符串中创建一个新字符串

Java 方法接受 0 个参数并使用带字符串的 if else 语句返回一个双精度值

是否有一个库可以基于字符串对 .Net 对象执行反射?

在字符串列表中对字符串使用Maybe