2012-04-23 2 views
2

Java 가변 인수를 선택적 매개 변수로 사용하는 것이 좋은 프로그래밍 관례로 간주됩니까?다중 인수에 대한 Java 가변 인수

더 많은 정보 : 인터페이스가 있고 일부 구현에 추가 매개 변수가 필요하며 일부 매개 변수가 필요하지 않은 경우 선택적 매개 변수의 메서드 서명에 varargs를 사용해도 괜찮습니까? 아마도 빈 문자열의 배열을 가져옵니다

public static void x(String ... strings) 

:

자바에서는 다음과 같은 관용구를 사용하는 것이 가능하다.

x() (empty array), x("1","2","3") etc 
+1

두 개의 명시 적 오버로드를 사용하지 않는 이유는 무엇입니까? –

+0

'varargs'로 정확히 무엇을 의미합니까? 예를 게시 할 수 있습니까? – home

+0

두 번째 인수는 인터페이스의 일부 구현에는 필요하지만 다른 인터페이스에는 필요하지 않습니다. 이 메서드는 항상 두 개의 매개 변수로 호출되지만 특정 인스턴스에 하나의 매개 변수 또는 두 개가 필요한지 미리 알 수는 없습니다 – Thlipp

답변

0

선택적 매개 변수를 구현하는 데 varargs를 사용하는 것은 좋지 않다고 생각합니다.

Animal a = new Dog(); 
a.speak("bow"); 

당신은 아무 생각이 동물은 동물의 목록 말에서 추출 된 경우는 개는 것을 알 수 없습니다로 인수가 적용되어야 하는지를 위의 예에서 기준을보고이 없습니다.

@Oli 명시 적 오버로드로 말한 것처럼 좋은 접근 방식입니다.

1

일반적으로 Varargs는 API 사용자가 전달하고자하는 "특정 유형"의 인수를 모르는 경우에 사용됩니다. 사용자가 매개 변수의 수를 전달하거나 전혀 전달하지 않기로 결정할 수 있으므로 문제가 있다고 생각하지 않습니다. 예 :

public class NewClass { 

    public void print(String... a) { 
     System.out.println(a); 
    } 

    public static void main(String[] args) { 
     new NewClass().print(); 
    } 
} 

Do not't inj. 당신은 varargs의 타입을 알고 있기 때문에.

2

아니요이라고 말하고 싶습니다. varargs를 사용하면 선택적 매개 변수에 대해 여러 인수를 제공 할 수 있습니다. 인터페이스를 구현하는 사람들에게 어떻게 의사 소통을하고, 하나의 가치 만 기대할 수있는 방법을 호출 할 것입니까? 여러 값이 제공 될 때 어떤 행동이 있어야합니까? 이것들은 불필요한 합병증입니다.

메서드에 선택적 인수에 정확히 0 또는 1 값이 필요한 경우 0 또는 1 값만 제공 할 수있는 언어 구문을 사용해야합니다. 메서드 시그니처를 오버로드하거나 선택적 매개 변수를 null로 허용하는 것이 더 적절합니다.

관련 문제