我正在尝试创建一个简单的泛型方法来交换数组中的两个条目,但是当我调用该方法时,它会产生以下错误。我错过了什么?我确信这是一个简单的解决方案,我根本看不到它。
Sorting.java
package testing;
import java.util.Comparator;
public class Sorting {
public static <T> void swap(T[] array, int left, int right){
T temp = array[right];
array[right] = array[left];
array[left] = temp;
}
}
SortTest.java
package testing;
import static testing.Sorting.*;
public class SortTest {
public static void main(String[] args){
int[] nums = {5, 12, 3, 7, 2};
swap(nums, 0, 1);
}
}
答案 0 :(得分:2)
Java中没有办法制作允许接受基元的通用方法。您不能将int[]
传递给期望T[]
的方法,也不能对任何类型的基元进行任何通用方法。你可以使用像Integer[]
这样的盒装数组,或者你可以自定义一个接受int[]
的重载。
您还遇到 需要编写Sorting.swap(nums, 0, 1)
而不仅仅是swap(nums, 0, 1)
的问题,或者您需要将import static testing.Sorting.swap;
写为import语句
答案 1 :(得分:1)
方法签名是通用的Object[]
,您无法指定int[]
int[] nums = {1};
Object[] o = nums; // doesn't compile
因此该方法不允许这样做。
您可以改为使用Integer[]
。
Integer[] nums = {5, 12, 3, 7, 2};
请注意,自动装箱不适用于数组,当泛型方法允许使用基元时,后台会有自动装箱。
泛型和基元类型不能很好地结合在一起。 (Java 10中的情况可能会好转)
答案 2 :(得分:0)
className.method
或instanceOfClass.method
(这将在编译时在class.method
中翻译)