【问题标题】:How to inspect "multi-object" return type如何检查“多对象”返回类型
【发布时间】:2011-07-09 20:33:03
【问题描述】:

是否有一种常见的反射方法来判断java方法是否返回一组对象,如数组、列表、集合、集合和其他可迭代的子接口? 背后的故事是我需要检查第三方方法的返回类型并说两件事:

  • 方法是否返回对象集(在 人的感觉)?
  • 如果是 - 组件类型是什么?

例如,如果方法的返回类型是 Vector<A>A[]Set<A> 等,我希望我的代码返回 A。 我是反射/泛型的新手,不想重新发明轮子,也不确定我的方法是否正确。这是我到目前为止所做的:

  private boolean isMultiple(Class clazz) {
    return clazz.isArray() || Iterable.class.isAssignableFrom(clazz);
  }

  private Class getReturnComponentType(Method m) {
    Class clazz = m.getReturnType();
    if(!isMultiple(clazz)) return clazz; // Not a collection
    // Collection
    if(clazz.isArray()) {
      // How do I get Array's component type?
      // return null;
    } else {
      // How do I get Iterable component type?
      // return null;
    }
  }

请帮忙。

【问题讨论】:

    标签: java arrays generics reflection collections


    【解决方案1】:
    1. 获取 Iterable 组件类型:除了getReturnType() 还使用getGenericReturnType() 获取泛型类型。然后将其与Type 子接口进行比较:GenericArrayType、ParameterizedType。

    2. 要获取数组组件类型,请使用clazz.getComponentType()

    【讨论】:

    • 我会说然后使用 Collection.class.isAssignableFrom() 或 Iterable.class.isAssignableFrom() 或 Class.isArray()。
    • 他已经这样做了。现在他需要类型参数(即 List 中的 T)
    • 谢谢。我主要担心我的 isMultiple 方法,很高兴它没关系。
    猜你喜欢
    • 2017-10-12
    • 2020-11-25
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 2019-05-14
    • 2013-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多