簡體   English   中英

如何使用varargs方法中的附加參數調用varargs方法

[英]How to call a varargs method with an additional argument from a varargs method

我有一些varargs系統函數,其中T是一些實際類型,如String

sys(T... args)

我想創建自己的函數,它委托給系統函數。 我的功能也是一個varargs功能。 我想通過系統函數傳遞函數的所有參數,以及一個額外的尾隨參數。 像這樣的東西:

myfunc(T... args) {
    T myobj = new T();
    sys(args, myobj); // <- of course, here error.
}

如何更改錯誤行? 現在我只看到一種方法:創建維度[args] + 1的數組,並將所有項目復制到新數組。 但也許存在一種更簡單的方法?

現在我只看到一種方法:創建維度[args] + 1的數組並將所有項目復制到新數組。

沒有更簡單的方法。 您需要創建一個新數組並將myobj包含為數組的最后一個元素。

String[] args2 = Arrays.copyOf(args, args.length + 1);
args2[args2.length-1] = myobj;
sys(args2);

如果您碰巧依賴Apache Commons Lang,您可以這樣做

sys(ArrayUtils.add(args, myobj));

或番石榴

sys(ObjectArrays.concat(args, myobj));

如果訂單不關心,您可以調用兩次sys()

T myobj=new T();
sys(myobj);
sys(args);

如果您不能使用它,請切換到所有功能的集合(例如LinkedList)。

如果你可以使用番石榴 ,那么你可以這樣做:

sys(ObjectArrays.concat(myobj, args))

Java 8解決方案:

sys(Stream.concat(Arrays.stream(args), Stream.of(myobj)).toArray(T[]::new));

暫無
暫無

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

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