如何检查“多对象”返回类型

时间:2011-03-06 16:03:59

标签: java arrays generics reflection collections

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

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

例如,如果方法的返回类型是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;
    }
  }

请帮忙。

1 个答案:

答案 0 :(得分:2)

  1. 获取Iterable组件类型:除了getReturnType()之外,还使用getGenericReturnType()来获取泛型类型。然后将其与Type子接口进行比较:GenericArrayType,ParameterizedType。

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