簡體   English   中英

int數組的通用交換方法

[英]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中情況可能會變得更好)

  1. swap方法是靜態的,盡管它是特定於類的。 為了調用它,您需要className.methodinstanceOfClass.method (這將在編譯時在class.method進行翻譯)
  2. 泛型不能應用於基元:請參見Java泛型為什么不支持基元類型?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM