【问题标题】:Pass reference of array of unknown type (Either Object or Primitive) to function将未知类型(对象或原始)数组的引用传递给函数
【发布时间】:2019-07-25 22:12:20
【问题描述】:

我正在尝试创建一个通用函数,该函数接受一个未知类型的数组并将其翻转。它不返回任何内容,并且应该将对数组的引用传递给函数。

我尝试过使用可变参数:

public static <Unknown> void reverseArray(Unknown... a){
  Unknown t;
  for(int i=0;i<a.length/2;i++){
    t = a[i];
    a[i] = a[a.length - i - 1];
    a[a.length - i - 1] = t;
  }
}

但这不适用于原始数据,因为 java 似乎没有传入对数组的引用 我试过对象[]

public static void reverseArray(Object[] a){
  Object t;
  for(int i=0;i<a.length/2;i++){
    t = a[i];
    a[i] = a[a.length - i - 1];
    a[a.length - i - 1] = t;
  }
}

但是当我通过 int[] java 时说它不适用于参数 (int[])

与泛型相同:

public static <Unknown> void reverseArray(Unknown[] a){
  Unknown t;
  for(int i=0;i<a.length/2;i++){
    t = a[i];
    a[i] = a[a.length - i - 1];
    a[a.length - i - 1] = t;
  }
}

【问题讨论】:

  • 如果你想走这条路,我认为你需要使用基元的类版本(Integer 而不是int)而不是原语。
  • stackoverflow.com/questions/2721546/… 看看这个答案,因为它可以帮助你了解为什么你不能这样做

标签: java arrays


【解决方案1】:

你做不到。您必须为要支持的每个 primitive type 提供单独的方法。

查看Java API for Arrays.toString() 以查看所有方法。 copyOfsort 以及其他人也是如此。

即使对于Generic typescommon 方法也必须是可以支持所有类型的东西。以前的示例是一些。但是你不能有一个泛型方法added two numbers,因为对于一个类型T,编译器不会知道T是否支持一个特定的操作。

【讨论】:

  • 什么?!?为什么Java是这样制作的?似乎编译器可以轻松做到这一点......
  • @Zyansheep 泛型不接受原始类型,但使用自动装箱来获取包装类。这不适用于数组,但您可以查看自动装箱,也许您会找到解决问题的方法。
猜你喜欢
  • 2012-11-25
  • 1970-01-01
  • 1970-01-01
  • 2018-02-15
  • 2014-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多