【问题标题】:Returning generic arrays in Java [duplicate]在Java中返回通用数组[重复]
【发布时间】:2015-11-19 08:01:19
【问题描述】:

我在初始化数组并返回它时遇到了问题。该方法假设返回通用数组的常见项,但我无法初始化数组“a”或返回它。有什么建议吗??

public static <T> T[] commonItems( T[] arr1, T[] arr2)
{
    T[] a;
    int pos = 0;
    for( int i = 0; i < arr1.length; i++)
    {
        for(int j = 0; j < arr2.length; j++)
        {
           if(arr1[i].equals(arr2[j]))
           {
               a[pos] = arr1[i];
               pos++;
           }
        }
    }
    return a;
}

【问题讨论】:

标签: java arrays generics


【解决方案1】:

你事先并不知道有多少元素是共同的,所以第一步最好将共同的项目收集在一个列表中:

public static <T> T[] commonItems( T[] arr1, T[] arr2)
{
     ArrayList<T> list = new ArrayList<>();
     for (int i = 0; i < arr1.length; i++)
     {
          for( int j = 0; j < arr2.length; j++)
          {
              if (arr1[i].equals(arr2[j]))
                  list.add(arr1[i]);
          }
     }

然后你可以创建结果数组,使用Class.getComponentType:

     T[] result = (T[])Array.newInstance(arr1.getClass().getComponentType(), list.size());
     list.toArray(result);
     return result;
}

【讨论】:

  • 感谢您的建议和建议,真的很有帮助。
  • @newacct 我不清楚你的意思。你如何调用commonItems 传递String[]Integer[] 数组?
  • @newacct 你可以调用commonItem(stringarray, integerarray); 它会编译(TObject&amp;Comparable&amp;Serializable)。它不会完全失败,而是返回一个空字符串数组。但是如果你写 String[] s = commonItem(stringarray, integerarray) 它不会编译:所以我不完全明白你的意思。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-28
  • 2015-05-09
  • 1970-01-01
  • 2016-06-29
  • 2022-07-12
  • 2019-05-22
相关资源
最近更新 更多