2012-07-04 2 views

답변

20

{ myObject } 구문이 special syntactic sugar이므로 배열 변수를 초기화 할 때만 적용됩니다. 이는 할당 자체에 형식 정보가 없기 때문입니다. 그러나 할당의 특수한 경우에 유형은 변수에서 완전히 추론됩니다.

첫 번째 예에서 컴파일러는 a (Object[])에 할당한다는 것을 알고 있으므로이 구문이 허용됩니다. 후자에서는 변수를 초기화하지 않습니다 (Java 유형 유추의 약점으로 인해 매개 변수 할당의 컨텍스트도 완벽하게 작동하지 않습니다). 따라서 블록을 선언하는 것과는 대조적으로 수행하려고하는 작업을 모호하지 않게 결정할 수 있다고해도 배열의 형식이 무엇인지 알 수 없습니다. 당신이 변수를 사용하지 않고 현재 위치에서 배열을 정의하려면 일하는 것이

someMethod (new Object[] { myObject }) 

를 호출

.


(가) 위의 질문과 같은 질문에 답을하는 동안

, 난 당신이 전화하고있는 방법은 varargs보다는 명시 적으로 배열 있었던 파라미터를 필요로하는 것을 알 수 있습니다. 따라서이 경우에는 간단히 전화 할 수 있습니다.

someMethod(myObject); 
+0

지나치게 길지 않은 깨끗하고 깔끔한 작업이 끝납니다. +1 –

6
someMethod(new Object[] { "" }); 

트릭을 수행해야합니다!

관련 문제