簡體   English   中英

具有可變參數類型和數量的Java方法

[英]Java method with variable argument type and quantity

我對Java中的泛型和varargs進行了一些研究,但似乎找不到如何將它們一起實現以創建具有靈活參數類型和數量的方法(和/或構造函數)的方法。 例如,假設我想創建一個方法,該方法可能需要整數數組或數量不固定的整數參數。 我可以這樣創建第一個:

public void example0 (int[] args) { }

以及后者:

public void example1 (int... args) { }

但是,如何將它們組合成一個名字呢? 而且,展望未來,我如何實現對多種數值類型(例如浮點數)的支持? 一個例子將是一個很好的答案。

更新:

謝謝,但是顯然對於一個較大的問題,我使用了一個太簡單的示例。 考慮任何數量的參數和類型,我將如何處理呢? 所以說:

public void example(int[] args) {}
public void example(string arg0, int[] args) {}
public void example(string arg0, string arg1) {}
...

一個int...參數可以接受int和int數組。 您只需使用一種方法即可處理這兩種方法。

public void example (int... args) { }

示例調用:

example(1, 2, 3);
example(new int[] { 1, 2, 3 });

而且,展望未來,我如何實現對多種數值類型(例如浮點數)的支持?

您可以嘗試使用Number ,它是IntegerFloat的超類。 但老實說,它笨拙且效率低下,不值得。 標准API方法往往對所有數字類型都具有重載。

public void example (int... args) { }
public void example (long... args) { }
public void example (float... args) { }
public void example (double... args) { }

在幕后,這兩種方法都將使用相同的簽名進行編譯。 例如vararg是用於創建新數組的語法糖。

兩種方法都與此等效。

public void example(int[] array)

public void example1 (int... args) { }也可以接受int[] 這樣就足夠了。
要接受多種類型的數值,可以使用泛型類,該泛型是Number的子類。

例如 :

public class Foo<T extends Number> {
   // ...
}

您可以使用它,例如:

Foo<Integer> fooInt = new Foo<>();
Foo<Float> fooFloat = new Foo<>();

但是請注意,由於取消裝箱操作,它的效率將比原始效率低。 因此,通常建議對每種原始類型使用重載方法:

public void example1 (int... args) { }
public void example1 (long... args) { }
public void example1 (double... args) { }

暫無
暫無

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

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