在下面的简单代码中,我可以看到“工厂”接口,它们之间的唯一区别是Factory0Bad
扩展Supplier
:
@FunctionalInterface
public static interface Factory0Bad<T> extends Supplier<T> {
T get();
}
@FunctionalInterface
public static interface Factory0Good<T> {
T get();
}
public static class Handler {}
public static class HandlerA extends Handler {}
public static void main(String[] args) {
// this line compiles
Factory0Good<? extends Handler> good = HandlerA::new;
// this does not!
Factory0Bad<? extends Handler> bad = HandlerA::new;
}
所以这条线
Factory0Good<? extends Handler> good = HandlerA::new;
被编译器(1.8.0u05)接受,但是这一行
Factory0Bad<? extends Handler> bad = HandlerA::new;
不是。
为什么是这样?我在这里想念什么?它是javac中的错误吗?