2014-04-08 3 views
3

내가 생성자의 번호를 가지고 다음 열거 한 작업을 실패합니다. 그러나 문제는 오류가 발생합니다 : Cannot resolve constructor Route(java.lang.String, null, com.foo.UserType).자바 생성자는 가변 인자

이처럼 보이는, 그래서 나도 생성자, 즉에서 varags을 제거하는 경우 :

Route(String baseName, String langFile, UserType availability) {} 

또는 즉, HOMEPAGE를 정의 할 때 내가 널을 변경하는 경우 :

HOMEPAGE("", "", UserType.GUEST); 

를 다음 그것은 작동합니다. 그러나 그것이 왜 그런지 이해가되지 않습니다. 왜 내가 네 번째 생성자를 호출하는지 감지하지 못합니까?

답변

10

nullString 또는 UserType 일 수 있습니다. 따라서 :

HOMEPAGE("", null, UserType.GUEST); 

은 세 번째 또는 네 번째 생성자 중 하나와 일치합니다. 네 번째 생성자가 발생할 것 Stringnull 캐스팅이 선택되고 :

HOMEPAGE("", (String) null, UserType.GUEST); 
+0

알겠습니다 ... 까다 롭습니다. 명확히 해 주셔서 감사합니다. null을 String에 캐스트하면, 그 생성자는 그 인수의 값으로서 null를 계속 받겠습니까? –

+0

@ClickUpvote, 예, 'null'로 유지됩니다. – hmjd

+0

세 번째 생성자는 두 개의 인수 만 사용하고 호출은 세 개의 인수를 분명히 전달합니다. 어떻게 세 번째 생성자를 호출 할 수 있습니까? – Gladhus

1

널 (null) 중 하나를 수 String 또는 UserType을 할 수 있기 때문에 : 모두 methodes와

Route(java.lang.String, null, com.foo.UserType) 

경기 :

Route(String langFile, UserType... availability) {} 
Route(String baseName, String langFile, UserType... availability) {} 
2

선택해야하는 생성자를 알지 못하는 것이 맞습니다. 전화 번호는

01입니다.
Route(String, null, UserType) 

위의 두 생성자를 참조 할 수는 없습니다.

그러나 nullUserType 일 수 있으므로 Route(String, UserType)을 참조 할 수 있습니다.
nullString 일 수 있으므로 Route(String, String, UserType)을 참조 할 수도 있습니다.

충돌이 있습니다.