【发布时间】:2021-08-22 05:41:37
【问题描述】:
我有以下单级继承。我无法理解的一件事是,getLine() 被推断为BaseLine,因为BaseDocument<T extends BaseLine> 而没有强制转换。但是对于列表,这不适用,每个元素都返回为Object。我的问题是:
-
为什么编译器不能将元素类型推断为
BaseLine。 -
如何更改实现,以便在迭代时获取元素为
BaseLine。public void test(){ BaseDocument baseDocument = new Document(); for (Object orderLine : baseDocument.getOrderLines()) { } BaseLine line = baseDocument.getLine(); } static class Document extends BaseDocument<Line> { @Override public List<Line> getOrderLines() { return null; } @Override public Line getLine() { return null; } } static abstract class BaseDocument<T extends BaseLine> { public abstract List<T> getOrderLines(); public abstract T getLine(); } static class Line extends BaseLine { } static abstract class BaseLine { }
【问题讨论】:
标签: java generics inheritance type-inference