簡體   English   中英

如何使方法將任何類型的數組作為參數?

[英]How can I make a method take an array of any type as a parameter?

我希望能夠將任何數組類型作為方法中的參數:

public void foo(Array[] array) {
    System.out.println(array.length)
}

有沒有辦法在同一個方法中傳遞String []或int []數組?

使用泛型

public <T>void foo(T[] array) {
    System.out.println(array.length);
}

這對於基本類型數組不起作用,例如int[]boolean[]double[] ,......你必須使用它們的類包裝器: Integer[]Boolean[]Double[] ,.. 。或分別為每個所需的基本類型重載您的方法。

好吧,你可以這樣做(因為數組是一個對象) -

public static int getArrayLength(Object array) {
    return Array.getLength(array);
}

public static void main(String[] args) {
    int[] intArray = { 1, 2, 3 };
    String[] stringArray = { "1", "2", "c", "d" };
    System.out.println(getArrayLength(intArray));
    System.out.println(getArrayLength(stringArray));
}

輸出是

3
4

可以使用泛型。

我不知道它我建議你在文檔中閱讀它。 http://docs.oracle.com/javase/tutorial/java/generics/index.html

泛型與Objects一起使用,所以我認為你不能在同一個方法中傳遞String []和int []。 請改用Integer []。

這是我將使用的代碼:

public static <K> int  length(K[] array){
    return array.length;
}

這也可行:

public static int  length(Object[] array){
    return array.length;
}

但它不允許您使用特定類型的Object而不是Object類。

我是新手,也許有更好的解決方案,但這是我唯一知道的!

正如其他人提到的那樣,如果你想要能夠接受原始類型的數組,現在有辦法做到這一點(除非你在Elliott的解決方案中做一些你只需要和Object的東西,並且只能使用方法比如將Object作為輸入的Array.getLength(Object)。

我做的是制作一個泛型方法,然后為每個基本數組類型重載它,如下所示:

public <T> void foo(T[] array) {
    //Do something
}

public void foo(double[] array) {
    Double[] dblArray = new Double[array.length];

    for(int i = 0; i < array.length; i++){
        dblArray[i] = array[i];
    }
    foo(dblArray);
}
//Repeat for int[], float[], long[], byte[], short[], char[], and boolean[]

暫無
暫無

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

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