簡體   English   中英

如何使方法在java中接受不同的參數數據類型?

[英]How do I make a method accept different parameter datatypes in java?

我從這個 SO問題中找到了下面的代碼。 它到目前為止工作得很好,但我遇到了改組字符串數組的需要。 下面的代碼只接受int數組作為參數。 我仍然是java的新手,我似乎無法弄清楚如何讓方法接受它的參數中的多個數據類型。 如果我可以使用相同的方法來改組整數的數組和字符串數組,那將是非常好的。 有人可以幫忙嗎?

static int[] shuffle(int[] ar) {
    // If running on Java 6 or older, use `new Random()` on RHS here
    Random rnd = ThreadLocalRandom.current();
    for (int i = ar.length - 1; i > 0; i--)
    {
        int index = rnd.nextInt(i + 1);
        // Simple swap
        int a = ar[index];
        ar[index] = ar[i];
        ar[i] = a;
    }
    return ar;
}

對於不同的參數,您應該有不同的方法。 這將是方法重載。

在你的情況下(對於字符串和int)

static int[] shuffle(int[] array)
static String[] shuffle(String[] array)

或者您可以在方法的參數中包含Object數組。 這樣你就必須在調用方法中將int數組定義為Integer類數組。

static Object[] shuffle(Object[] array)

Object是Java中所有類的超類,子類'object可以由超類'引用處理。

由於int是基本類型,而不是類,因此必須將int數組定義為Integer數組。 Integer是int的類型包裝類。

您可以使用兩種不同的方法。 一個調整int數組和一個shuffles字符串數組。

static String[] shuffleStringArray(String[] ar){
    //method logic goes here
}

你的方法的基本結構不應該改變太多。

祝好運!

Java通過使數組變形來解決這個問題。 這意味着如果B是A的子類型,則B []是A []的子類型。 這意味着您可以創建參數類型Object[]並且可以傳入任何對象數組。 對於像int這樣的基本類型,你仍然需要編寫一個單獨的方法,因為基元不是對象。

以這種方式使用通用數組

static <T> T[] shuffle(T[] ar){
// If running on Java 6 or older, use `new Random()` on RHS here
    Random rnd = ThreadLocalRandom.current();
    for (int i = ar.length - 1; i > 0; i--)
    {
      int index = rnd.nextInt(i + 1);
      // Simple swap
      T a = ar[index];
      ar[index] = ar[i];
      ar[i] = a;
    }
    return ar;
}

像這樣調用它:

System.out.println(Arrays.toString(shuffle(new Integer[]{1,2,3,4})));

(要么)

System.out.println(Arrays.toString(shuffle(new String[]{"a","b","c"})));

您不能讓方法對int數組和引用類型數組執行相同的操作,因為Java將它們視為完全不同的類型,並且它們的公共超類( Object )缺少作為數組的功能。 但是,您似乎正在進行重載 (請參閱重載方法部分)。 您可以為不同的參數單獨實現該方法。 只需復制/粘貼代碼並用String替換int相關實例。 這實際上是對Arrays.copyOf的基本類型數組Arrays.copyOf

如果需要同時支持對象和基元,則無法執行此操作。 您需要為每個基本類型創建一個重載方法,為Object創建一個重載方法。 該方法的每個版本將重新實現具有不同數據類型的相同算法。

您的方法類似於java.util.Arrays類中的方法。 看看Open JDK中的Arrays.java源代碼。

http://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/be44bff34df4/src/share/classes/java/util/Arrays.java

暫無
暫無

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

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