2
으로 변환 할 수 없습니다. 구아바의 Ordering 클래스에서이 이상한 조건을 만났습니다. 삼원 연산자를 사용하여이 코드구아바의 삼항 연산자 문제 : 주문 번호 <Comparable>을 주문 번호 <String>
:
Ordering<String> ordering = flag ? Ordering.natural().nullsFirst() : Ordering.natural().nullsLast();
참고 flag
부울 변수이다.
Type mismatch: cannot convert from Ordering<Comparable> to Ordering<String>
을하지만 경우 - 다른 블록으로 변경하는 경우, 오류가 없습니다.
Ordering<String> ordering;
if (flag) {
ordering = Ordering.natural().nullsFirst();
}
else {
ordering = Ordering.natural().nullsLast();
}
누구든지 여기서 무슨 일이 일어 났는지 설명 할 수 있습니까?
참고 : 내가 사용 자바 7
이것은 Java 7의 제네릭 형식 유추의 제한 사항입니다. 8로 업그레이드하면 문제가 없습니다. 할 수 없다면, 명시 적 타입 인자를 사용하거나'if' 솔루션을 사용하십시오. –
제한 사항에 대해 자세히 설명해 주시겠습니까? 'Ordering'로 변경하면 오류가 사라지지만 "Comparable은 원시 형식입니다. 제네릭 형식 Comparable 을 매개 변수화해야합니다"라는 경고가 표시됩니다. 그런 다음 'Ordering >'으로 변경하면 오류가 다시 발생합니다. <: o) –
null
일반 메소드에 명시적인 유형을 지정하기 만하면됩니다. Java 7 컴파일러는 원하는 것을 해결할 수 없습니다. –