2012-05-17 2 views
3

내 ArrayList를 인식하지 못합니다. 결과를 검사 할 때 ArrayList 항목을 래핑하는 싱글 톤 목록입니다. 왜 Java가 더 적절한 생성자를 사용하지 않으며 강제로 내 옵션을 사용할 수 있습니까?왜 자바 내가 두 생성자 설정과 같이이 오버로드 된 생성자 상황

+0

arraylist의 일반적인 유형은 무엇인가? –

+0

설명하고 게시 한 내용은 의도 한대로 작동합니다. 실제로 생성자를 호출하는 코드는 무엇입니까? – Affe

답변

11

통화 제 생성자 :

new XMessage(information, new ArrayList<Object>()); 

두 번째 생성자를 호출 ArrayList<Object> 인 반면

new XMessage(information, new ArrayList<String>()); 

ArrayList<String>()List<Object>로 취급되지 않는다. 다음과 같은 생성자를 사용하는 것이 좋습니다 : 아래의 제안

public XMessage(Information info, List<? extends Object> results) 

@LuiggiMendoza 한다.

+0

또한 모든 객체 목록을 전달하려면 와일드 카드를 사용해야합니다. public XMessage (Information info, List results). –

+0

와우, 정보 주셔서 감사합니다! – MikeG

+0

@LuiggiMendoza : 감사합니다. 내 대답에 제안을 추가했습니다. –

1

List<String>List<Object>가 수신자 잘 목록에 물건을 추가 할 수 있다는 것입니다 서브 클래스 (또는에 대한 다른 substituable)없는 이유, 그리고 List<String>는 유형 안전 할 예정이다.

단순히 동일한 입력을 사용할 수 없다면 here 옵션에 대해 더 자세히 읽을 수 있습니다.

0

나는 위의 대답을 시도하고 그들이 나를 위해 일하고 있다고 생각했지만 거짓 긍정이되었습니다. 나는이 생성자와 함께 일하고 나를 위해 일했다 :

public XMessage(Information info, Object result) { 
    this(info, result instanceof List ? (List<Object>) result : Collections.singletonList(result)); 
}