-1

这对我来说看起来很奇怪。有人可以解释一下吗?

请注意,代码从不使用“?extends”,只使用“?super E”,但由于某些特殊原因,编译器会使用“?extends”。

import java.util.Comparator;

public class TestClass <E> {

    private Comparator<? super E> compNatural = new Comparator<E>() {
        @SuppressWarnings("unchecked")
        @Override
        public int compare(E lhs, E rhs) {
            return ((Comparable<E>)lhs).compareTo(rhs);
        }
    };

    private Comparator<? super E> comp; 

    public TestClass(Comparator<? super E> comp) {
        // Reports an error:
        // Type mismatch: cannot convert from Comparator<capture#10-of ? extends Object> to Comparator<? super E> 
        this.comp = (comp==null) ? compNatural : comp;

        // The following compiles OK!!!
        if (comp==null) this.comp = compNatural; else this.comp = comp;         
    }


}
4

1 回答 1

1

这与三元运算符无法推断出正确的类型有关。请检查这个问题Java if 三元运算符和 Collections.emptyList()

于 2013-04-08T05:44:02.557 回答