java - 원인 - 자바 리스트



Arrays.asList의 반환 유형을 강제로 수행 할 수 있습니까? (1)

귀하의 구문은 거의 정확합니다; <Base> 는 메서드 이름 앞에옵니다.

return Arrays.<Base>asList(new Derived(),
                           new Derived());

Java 8

Java 8의 경우 대상 유형 유추개선 되어 명시 적 유형 인수가 필요하지 않습니다. 메서드의 반환 형식이 Collection<Base> 이므로 형식 매개 변수는 Base 로 유추됩니다.

return Arrays.asList(new Derived(),
                     new Derived());

명시적인 형식 매개 변수는 Java 7 이하에서는 여전히 필요합니다. Java 8에서 명시 적 유형 매개 변수를 계속 제공 할 수 있습니다. 선택 사항입니다.

기본 클래스의 컬렉션을 반환하는 메서드가 있습니다.

import java.util.*;
class Base { }
class Derived extends Base { }

Collection<Base> getCollection()
{
    return Arrays.asList(new Derived(),
                         new Derived());
}

Arrays.asList ( List<Derived> )의 반환 유형이 메서드의 반환 유형 ( Collection<Base> )과 일치하지 않으므로 컴파일이 실패합니다. 왜 그런 일이 일어 나는지 이해 : 제네릭 형식이 다르므로 두 클래스는 상속과 관련이 없습니다.

Arrays.asList를 사용하지 않고 메소드의 리턴 유형을 변경하여 컴파일러 오류를 수정하여 여러 파생 오브젝트 중 하나를 기본 오브젝트로 형변환하는 많은 방법이 있습니다.

Arrays.asList 호출에 대한 제네릭 형식을 해결할 때 컴파일러에게 다른 형식이지만 호환 가능한 형식을 사용하도록 지시하는 방법이 있습니까? (나는이 패턴을 사용하고이 문제에 부딪 치고있다. 그래서 그것을 작동시키는 방법이 있다면, 나는 그것을 알고 싶다.)

네가 뭔가를 할 수 있다고 생각 했어.

Collection<Base> getCollection()
{
    return Arrays.asList<Base>(new Derived(),
                               new Derived());
}

컴파일하려고하면 (java 6), 컴파일러는 쉼표로 ')'를 기다리고 있다고 불평합니다.





generics