일반 유형 "? super SomeClass"를 추론 할 수 없습니다.

iy

내 일반적인 방법으로 문제를 식별하려고 시도한 후 다음 코드로 끝났습니다.

        Map<String, BiConsumerThatThrows<CheckPayment, XMLEventReader>> a = CheckPayment.childMapper;
        BiConsumerThatThrows<CheckPayment, XMLEventReader> a1 = a.get("1");
        BiConsumerThatThrows<? super CheckPayment, XMLEventReader> b1 = a1;
        Map<String, BiConsumerThatThrows<? super CheckPayment, XMLEventReader>> b = new HashMap<>();
        b.put("1", b1);
        b = a;

다음 오류로 컴파일되지 않습니다 (더 읽기 쉽게 형식화했습니다).

[ERROR] /D:/lalala/MyClass.java:[152,27] 
    incompatible types: 
        java.util.Map<
            java.lang.String,
            blablabla.BiConsumerThatThrows<
                blablabla.CheckPayment,
                javax.xml.stream.XMLEventReader
            >
        > 
    cannot be converted to 
        java.util.Map<
            java.lang.String,
            blablabla.BiConsumerThatThrows<
                ? super blablabla.CheckPayment,
                javax.xml.stream.XMLEventReader
            >
        >

가장 놀라운 것은 주어진 코드 조각의 마지막 줄에서만 충돌한다는 것입니다.

왜 발생합니까? 그러한 임무를 수행하기 위해 무엇을 할 수 있습니까?

Oracle JDK 1.8u40 x64를 사용하고 있습니다.

추신 다음은 간단한 예입니다.

Set<Set<String>> sets = new HashSet<>();
Set<Set<? super String>> sets2 = new HashSet<>();
sets2 = sets;

오류:

incompatible types: java.util.Set<java.util.Set<java.lang.String>> cannot be converted to java.util.Set<java.util.Set<? super java.lang.String>>

PPS 이것도 작동하지 않습니다.

Set<Set<Object>> sets2 = new HashSet<Set<String>>();

왜?

Thecoop

문제는 일반 형식 매개 변수 제약 조건이 중첩 제약 조건에 대해 투명하지 않다는 것입니다. A는와 Map<String, List<Integer>>다른 유형이며 하나를 다른 유형에 Map<String, List<? super Integer>>할당 할 수 없습니다. 이것이 당신이 여기에서 마주 치는 문제입니다.

이 문제를 해결하려면 다음을 사용하여 와일드 카드를 최상위 일반 선언에 적용해야합니다 extends.

Map<String, ? extends List<? super Integer>> m = new HashMap<String, List<Integer>>()

참고이은을이다 extends아닌 superA가 있기 때문에 List<Integer>A는 서브 의 유형 List<? super Integer>(내가 아니라이 mindbending을 찾을 수 있습니다). 따라서 귀하의 경우 이것은 다음과 같습니다.

Map<String, ? extends BiConsumerThatThrows<? super CheckPayment, XMLEventReader>> b = ...

그리고 단순화 된 예 :

Set<? extends Set<? super String>> sets2 = new HashSet<>();

이를 이해하는 데 도움이 될 수 있습니다. http://www.angelikalanger.com/GenericsFAQ/FAQSections/TypeArguments.html#FAQ104

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

일반 방법은 유형을 추론 할 수 없습니다.

분류에서Dev

복잡한 클로저 반환 유형 swiftUI를 추론 할 수 없습니다.

분류에서Dev

함수 반환 유형을 추론 할 수 없습니다.

분류에서Dev

Swift : 일반 매개 변수를 추론 할 수 없습니다.

분류에서Dev

Rust의 재귀 열거 형에서 일반 함수 유형을 추론 할 수 없습니다.

분류에서Dev

Haskell 인터프리터는 반환 유형을 추론 할 수 없습니다.

분류에서Dev

스칼라 메서드가 반환 유형을 추론 할 수 없습니다

분류에서Dev

Rust는 일반 특성 impl에 대한 반환 유형을 추론 할 수 없습니다.

분류에서Dev

SwiftUI UIViewRepresentable에서 "일반 매개 변수를 추론 할 수 없습니다."

분류에서Dev

일반 매개 변수 'Self'를 신속하게 추론 할 수 없습니다.

분류에서Dev

일반 매개 변수 'Parent'를 유추 할 수 없습니다.

분류에서Dev

복잡한 클로저 반환 유형을 추론 할 수 없습니다. Swift UI를 명확하게하기 위해 명시 적 유형 추가

분류에서Dev

복잡한 클로저 반환 유형을 추론 할 수 없습니다. Custom TextField를 명확하게하기 위해 명시 적 유형 추가

분류에서Dev

Xcode에서 CS193p 프로젝트의 SwiftUI 'Text'에서 일반 유형 'S'를 추론 할 수 없습니다.

분류에서Dev

다른 모듈에서 일반을 정의 할 때 일반 매개 변수를 추론 할 수 없습니다.

분류에서Dev

할당 후 일반 매개 변수 'T'를 유추 할 수 없습니다.

분류에서Dev

Typescript 추론 유형은 사용할 수 없습니다.

분류에서Dev

TypeScript는 약속 유형을 추론 할 수 없습니다.

분류에서Dev

속성 getter에서 유형을 추론 할 수 없습니다.

분류에서Dev

일반 클래스에 대한 형식 인수를 유추 할 수 없습니다.

분류에서Dev

전역 함수에서 유형 매개 변수를 추론 할 수 없습니다.

분류에서Dev

선택적 일반 유형 매개 변수는 유추 할 수 없습니다.

분류에서Dev

오류 :`_`에 대한 충분한 유형 정보를 추론 할 수 없습니다. 유형 주석 또는 일반 매개 변수 바인딩이 필요합니다.

분류에서Dev

컴파일러가 식 유형을 추론 할 수 없습니까?

분류에서Dev

컴파일러가 static_cast의 유형 매개 변수를 추론 할 수없는 (또는 추론하지 않는) 이유는 무엇입니까?

분류에서Dev

일반 매개 변수 T를 유추 할 수 없습니다. 공장 방법

분류에서Dev

유형 변수없이 반환 유형을 어떻게 추론 할 수 있습니까?

분류에서Dev

if let 문을 사용하여 복잡한 클로저 반환 유형을 추론 할 수 없습니다.

분류에서Dev

Rust 오류 : 특성의 impl을 찾기에 충분한 유형 정보를 추론 할 수 없습니다.

Related 관련 기사

  1. 1

    일반 방법은 유형을 추론 할 수 없습니다.

  2. 2

    복잡한 클로저 반환 유형 swiftUI를 추론 할 수 없습니다.

  3. 3

    함수 반환 유형을 추론 할 수 없습니다.

  4. 4

    Swift : 일반 매개 변수를 추론 할 수 없습니다.

  5. 5

    Rust의 재귀 열거 형에서 일반 함수 유형을 추론 할 수 없습니다.

  6. 6

    Haskell 인터프리터는 반환 유형을 추론 할 수 없습니다.

  7. 7

    스칼라 메서드가 반환 유형을 추론 할 수 없습니다

  8. 8

    Rust는 일반 특성 impl에 대한 반환 유형을 추론 할 수 없습니다.

  9. 9

    SwiftUI UIViewRepresentable에서 "일반 매개 변수를 추론 할 수 없습니다."

  10. 10

    일반 매개 변수 'Self'를 신속하게 추론 할 수 없습니다.

  11. 11

    일반 매개 변수 'Parent'를 유추 할 수 없습니다.

  12. 12

    복잡한 클로저 반환 유형을 추론 할 수 없습니다. Swift UI를 명확하게하기 위해 명시 적 유형 추가

  13. 13

    복잡한 클로저 반환 유형을 추론 할 수 없습니다. Custom TextField를 명확하게하기 위해 명시 적 유형 추가

  14. 14

    Xcode에서 CS193p 프로젝트의 SwiftUI 'Text'에서 일반 유형 'S'를 추론 할 수 없습니다.

  15. 15

    다른 모듈에서 일반을 정의 할 때 일반 매개 변수를 추론 할 수 없습니다.

  16. 16

    할당 후 일반 매개 변수 'T'를 유추 할 수 없습니다.

  17. 17

    Typescript 추론 유형은 사용할 수 없습니다.

  18. 18

    TypeScript는 약속 유형을 추론 할 수 없습니다.

  19. 19

    속성 getter에서 유형을 추론 할 수 없습니다.

  20. 20

    일반 클래스에 대한 형식 인수를 유추 할 수 없습니다.

  21. 21

    전역 함수에서 유형 매개 변수를 추론 할 수 없습니다.

  22. 22

    선택적 일반 유형 매개 변수는 유추 할 수 없습니다.

  23. 23

    오류 :`_`에 대한 충분한 유형 정보를 추론 할 수 없습니다. 유형 주석 또는 일반 매개 변수 바인딩이 필요합니다.

  24. 24

    컴파일러가 식 유형을 추론 할 수 없습니까?

  25. 25

    컴파일러가 static_cast의 유형 매개 변수를 추론 할 수없는 (또는 추론하지 않는) 이유는 무엇입니까?

  26. 26

    일반 매개 변수 T를 유추 할 수 없습니다. 공장 방법

  27. 27

    유형 변수없이 반환 유형을 어떻게 추론 할 수 있습니까?

  28. 28

    if let 문을 사용하여 복잡한 클로저 반환 유형을 추론 할 수 없습니다.

  29. 29

    Rust 오류 : 특성의 impl을 찾기에 충분한 유형 정보를 추론 할 수 없습니다.

뜨겁다태그

보관