[英]Generic swap method for int array
我正在嘗試創建一個簡單的通用方法,該方法可以交換數組中的兩個條目,但是當我調用該方法時,它會出現以下錯誤。 我想念什么? 我敢肯定這是一個簡單的解決方法,只是看不到它。
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);
}
}
在Java中,沒有一種方法可以使泛型方法被接受。 您不能將int[]
傳遞給需要T[]
,也不能使任何方法在不同類型的基元上通用。 您可以使用類似Integer[]
的盒裝數組,也可以自定義編寫接受int[]
的重載。
你也有你需要編寫問題Sorting.swap(nums, 0, 1)
而不是僅僅swap(nums, 0, 1)
或者你需要寫import static testing.Sorting.swap;
作為導入語句。
方法簽名是一個通用的Object[]
,您不能為其分配一個int[]
int[] nums = {1};
Object[] o = nums; // doesn't compile
因此該方法不允許這樣做。 您可以改用Integer[]
。
Integer[] nums = {5, 12, 3, 7, 2};
請注意,自動裝箱不適用於數組,當泛型方法允許使用基元時,在后台進行自動裝箱。
泛型和基元類型不能很好地配合使用。 (在Java 10中情況可能會變得更好)
className.method
或instanceOfClass.method
(這將在編譯時在class.method
進行翻譯)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.