【发布时间】:2018-03-01 17:02:23
【问题描述】:
我想知道为什么 java 不允许覆盖下界泛型参数。
public interface NumberConsumer {
public void accept(Consumer<? super Number> consumer);
}
public interface IntegerConsumer extends NumberConsumer {
@Override
public void accept(Consumer<? super Integer> consumer);
}
在上面的示例中,重写方法 accept 是完全安全的,因为 NumberConsumer 可以接受数字、可序列化和对象的消费者,而 IntegerConsumer 也可以接受所有这些和整数。
这也是不允许的,尽管它也是完全安全的。
public interface IntegerPrinter {
public void print(List<? extends Integer> list);
}
public interface NumberPrinter extends IntegerPrinter {
@Override
public void print(List<? extends Number> list);
}
这里 NumberPrinter 可以毫无问题地使用List<? extends Integer>。
最后,一些类似的情况(或相反的情况)被允许在返回中。
public interface NumberListProducer {
java.util.List<? extends Number> next();
}
public interface IntegerListProducer extends NumberListProducer {
@Override
java.util.List<? extends Integer> next();
}
【问题讨论】:
标签: java generics overriding