2009-10-03 2 views
2

이 잘 컴파일 : -var-args는 메소드 인수로만 사용할 수 있습니까?

public class Demo { 

    public static void main(String... args) { 

    } 
} 

을하지만 이것은 컴파일지고 있지 않습니다.

public class Demo { 

    public static void main(String... args) { 
     String... strVarArgs ; 

     //here i initiallize strVarArgs by some logic, like we do for arrays 
    } 
} 

내가 문법적으로 틀리면 올바른지 확인하십시오.


:-) 클리 터스는 썼다 : - 그것은 배열 여기

에 대한 정말 그냥 문법 설탕은 이제 캐시가 쓴 매우 인기있는 자바 책에서 문 다음에 예입니다 시에라와 버트 베이츠 (Head First Java, 제 2 판, McGraw-Hill/Osborne) : -

주제 제네릭,

하는 MyInterface는 인터페이스 MyClass의 클래스이다

<T extends MyClass> 15,, 및

<T extends MyInterface>

.

따라 인이 책 (548 페이지, 16 장) 복사와 같이 - 제네릭

가 "수단 연장" ""확장하거나 구현 ??? 자바 엔지니어는 매개 변수화 된 유형에 제약 조건을 지정하여 제한 할 수있는 방법을 제공해야했습니다. 그러나 특정 인터페이스를 구현하는 클래스 만 허용하도록 유형을 제한해야합니다. 그래서 상속과 구현 모두를 위해 일종의 구문을 필요로하는 상황이 있습니다. 즉, 확장 및 구현 모두에서 작동합니다. 그리고 우승 단어는 ... 확장합니다. Sun 엔지니어가 기존 키워드를 재사용 할 수있는 기회가있을 때마다 "확장"으로 여기에서했던 것처럼 일반적으로 그렇게합니다. 하지만 때로는 선택의 여지가 없습니다 ... (assert, enum).

MyQuestion : var-args는 배열의 구문 설탕이며 다른 기능은 없습니까?

+1

Vaargs로 인해 문제가 발생하므로 기본적으로 사용해서는 안됩니다. 확실히'main'을 사용하면 도움이되지 않습니다. –

+0

thnx. 편집에 대한 좋은 언급은 대단히 감사하겠습니다. :) – mogli

+0

'extends'키워드에 관한 자료가 원래의 질문과 전혀 관련이없는 것을 나는 이해하지 못한다. – erickson

답변

3

예, varargs는 함수 인수에만 적용됩니다.

그것은 정말 그냥 문법 배열 설탕 그래서 대신 있어요 :

String... strVarArgs ; 

은 당신이 원하는

String strVarArgs[]; 
+7

타입 정보를 모두 한 곳에 보관하는 것이 더 좋습니다.'String [] strVarArgs' –

+1

오래된 C 습관은 몹시 죽습니다. :) – cletus

+3

나는 그 문법을 포함하지 않았 으면 좋겠다. ( –

1

예 :

public class VargArgsExample { 

public static void printArgs(long requiredLongArgument, String... notRequiredStringArray) { 
    System.out.println(requiredLongArgument); 
    if (notRequiredStringArray != null) { 
     for(String arg: notRequiredStringArray) { 
      System.out.println(arg); 
     } 
    } 
} 

public static void main(String[] args) { 
    printArgs(1L); 
    printArgs(1L, "aa"); 
    printArgs(1L, "aa", "bb"); 
} 

}

으로 당신이 볼 수 있습니다 이 구문 설탕 을 사용하면 varargs 인수을 지정하지 않고 메소드를 호출 할 수 있습니다. vararg 인수가 전달되지 않으면 null입니다.

변수 선언의 다른 방법이 필요하지 않으므로 변수 선언에 사용되지 않습니다. 그래서 컴파일 타임 오류가 발생합니다.