如何编写一个java函数来返回动态类型的数组?

时间:2018-04-24 08:49:25

标签: java arrays generics

我有一种情况,我希望得到一个对象的数组,无论对象是什么类型。

以下是我试过的:

调用函数的代码:

wsDeployedExaminersResponseVO.setDeployedExaminers((DeployedExaminersVO[]) returnArrayForType(wsDeployedExaminersVO));

功能代码:

 public static Object[] returnArrayForType(Object type) throws Exception {
   Object[] objects={type};
   return objects;
 }

但是当我运行代码时,我会在调用代码时抛出异常。我这样做的原因是因为我正在尝试自动生成java代码,我需要一个函数,它将返回参数类型的数组或一个代码函数,它可以动态地适应set函数运行时的类型。

2 个答案:

答案 0 :(得分:4)

根据this,您可以使用泛型来解决它。我希望以下代码有所帮助。

public static void main(String[] args) throws Exception {
    Integer[] a = genericMethod(Integer.class, 5);
    String[] b = genericMethod(String.class, "dddddddddddd");
}

public static <T> T[] genericMethod(Class<T> clazz, T input) {
    @SuppressWarnings("unchecked")
    T[] res = (T[]) Array.newInstance(clazz, 1);
    res[0] = input;
    return res;
}

答案 1 :(得分:3)

两个问题:

  1. 你有几件物品?
  2. 您需要对象的实际类型还是超级类型?
  3. 解决方案

    1,仅适用于1个实例

    {"type": "evaluator", "index": 0}

    2,对于多个对象

      @SuppressWarnings("unchecked")
      public static <T> T[] getArray(T value) {
        Object array = Array.newInstance(value.getClass(), 1);
        Array.set(array, 0, value);
        return (T[]) array;
      }
    

    3,对于显式类型

    3.1对于1个实例

      @SuppressWarnings("unchecked")
      public static <T> T[] getArray(T... value) {
        return value;
      }
    

    3.2对于多个实例

      @SuppressWarnings("unchecked")
      public static <T> T[] getArray(Class<T> clz, Object value) {
        Object array = Array.newInstance(clz, 1);
        Array.set(array, 0, value);
        return (T[]) array;
      }