2012-02-13 4 views
4

나는 방법 public void foo(Object... x)이있는 경우, 나는이 방법으로 호출 할 수 있습니다 자바 가변 인자 호출에 요소를 추가하는 분명히 크기가 1보다 큰 배열을 bar으로 만들고 baz을 복사하고 bar의 내용을 복사하면됩니다. 그러나 더 읽기 쉬운 지름길이 있습니까?대부분의 읽을 수있는 방법은

+0

[varargs 메서드에서 추가 인수를 사용하여 varargs 메서드를 호출하는 방법] (http://stackoverflow.com/questions/27293989/how-to-call-a-varargs-method-with-an) -additional-argument-from-varargs-method) – Raedwald

+0

@Raedwald 보낸 사람 http://meta.stackoverflow.com/questions/286720/old-own-question-flagged-as-duplicated-of-newownown-question : "새로운 질문이 더 오래된 대답보다 더 좋은 답변을 가지고 있다면, 더 오래된 질문이 새로운 질문의 사본으로 닫히는 것은 완전히 받아 들일 수있다." 나는 거기에 대한 대답이 더 좋다고 생각하지 않는다. –

답변

5

구아바의 ObjectArrays 클래스는 방법을 제공합니다 주로 이러한 목적을 위해, 배열의 시작 또는 끝 부분에 하나의 객체를 연결할 수 있습니다. 선형 오버 헤드를 피할 수있는 방법은 없지만 이미 구축되고 테스트되었습니다.

+0

좋은 점이 구아바를 사용하고 있지만, 'concat (...)'메소드가 varargs 매개 변수를 제공하고 있음을 알고 싶습니다. :) – Thomas

+0

나는'concat (T [], T [], Class )'가 가능한 가장 가까운 타입 안전 옵션이라고 믿는다. –

+0

특히 Java 6 (generics와 varargs는 여전히 구아바가 목표로 삼고있는)에서 잘 작동하지 않으므로 어색합니다. @SafeVarargs와 같은 메소드에 주석을다는 것은 Java 7에서 충분히 안전하다고 생각하지만, 아직까지는 안전하지 않습니다. –

1

가능성이 foo()를 오버로드하는 것입니다 :

public void foo(Object... x) {} 
public void foo(Object[] a, Object... x) {} 
3

불행하게도, 아웃 - 오브 - 박스가 더 읽기 쉽게하는 방법이 아니다.

그러나 배열 및 vargs 매개 변수를 취하는 helper 메서드를 생성하고 varargs가 추가 된 배열을 반환 할 수 있습니다. 이 같은

뭔가 :

public T[] append(T[] originalArray, T... additionalElements) { ... } 

foo(append(bar, baz)); 
+0

영리; 나는 "독창적 인 방법으로 읽을 수있는 방법이 없다"는 것에 동의하지 않습니다. :) –

관련 문제