Предположим, вместо этого вы использовали ? super Double
:
Comparator<? super Double> comparator = new Comparator<Object>() {
// ...
};
То, что вы говорите компилятору, это то, что у вас есть компаратор, который
- может быть a
Comparator<Double>
, или - может быть a
Comparator<Number>
, или - , может быть a
Comparator<Object>
или - может быть a
Comparator<Serializable>
.
Даже если вы инициализировали его с Comparator<Object>
, компилятор не знает этого, потому что компилятор не выполнить код. Компилятор знает только, что переменная содержит компаратор одного из указанных выше типов.
Поскольку переменная может содержать компаратор типа, более специфичного c, чем Object, компилятор будет не предполагайте, что все в порядке, чтобы передать объект.