繁体   English   中英

如何检查方法是否返回Collection <Foo> 在Java?

[英]How to check that a method returns Collection<Foo> in Java?

我希望检查接口中是否存在基于其签名的方法。

该方法应具有的签名是:

Collection<Foo> methodName(Spam arg0, Eggs arg1, ...)

我可以通过Class.getMethods()找到方法,然后分别使用method.getName()method.getParameterTypes()method.getReturnType()查找名称,参数和返回类型。

但是,为了确保只选择返回Collection<Foo>方法而不选择其他集合,我应该如何比较返回类型?

method.getReturnType().equals(Collection.class) 

由于上述内容对于返回集合的所有方法都是如此,而不仅仅是那些返回Foo集合的方法。

有一个名为public Type getGenericReturnType() ,它可以返回一个ParameterizedType (如果是这种情况)。

ParameterizedType可以为您提供有关泛型类型(如Collection<Foo>更多信息。

特别是使用getActualTypeArguments()方法,您可以获得每个参数的实际类型。

这里, ParameterizedType表示Collection, getActualTypeArguments()表示包含Foo的数组

您可以尝试这样列出泛型类型的参数:

Type returnType = method.getGenericReturnType();
if (returnType instanceof ParameterizedType) {
    ParameterizedType type = (ParameterizedType) returnType;
    Type[] typeArguments = type.getActualTypeArguments();
    for (Type typeArgument : typeArguments) {
        Class typeArgClass = (Class) typeArgument;
        System.out.println("typeArgClass = " + typeArgClass);
    }
}

资料来源: http //tutorials.jenkov.com/

通用类型参数在Java中不会保留(即,它只是一个编译时功能),因此您无法执行此操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM