在 Java < 8 中,返回“不安全”对象(对象或 null),我能够在子类中专门化返回类型:
class A {}
class B extends A {}
interface Sup { A a(); /* returns A instance, or null */ }
interface Sub extends Sup { B a(); }
在 Java 8 中,如果我想让我的 API “更安全”,我应该返回Optional<A>
而不是“原始” A
:
interface Sup { Optional<A> a(); }
interface Sub extends Sup { Optional<B> a(); }
但不编译!因为Optional<B>
不是 的子类Optional<A>
。
我应该如何解决这个问题?