[英]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.