为什么这个Java 8程序不能编译?
为什么这个Java 8程序不能编译?
这个程序在Java 7中可以编译通过(或在Java 8中使用-source 7
编译通过),但在Java 8中无法编译通过:
interface Iface{} class Impl implements Iface {} class Acceptor > { public Acceptor(T obj) {} } public class Main { public static void main(String[] args) { Acceptor> acceptor = new Acceptor<>(new Impl()); } }
结果:
Main.java:10: 错误: 不兼容的类型: 无法推断Acceptor<>的类型参数 Acceptor> acceptor = new Acceptor<>(new Impl()); ^ 原因: 推断变量T具有不兼容的边界 相等性约束: Impl 上界: Iface,Iface 其中T是一个类型变量: T extends Iface 在Acceptor类中声明 其中CAP#1是一个新的类型变量: CAP#1 extends Iface 来自? 1个错误
换句话说,这是Java 7和8之间的源向后不兼容性。我查阅了Java SE 8和Java SE 7之间的不兼容性列表,但没有找到适合我的问题的内容。
那么,这是一个bug吗?
环境:
$ /usr/lib/jvm/java-8-oracle/bin/java -version java version "1.8.0" Java(TM) SE Runtime Environment (build 1.8.0-b132) Java HotSpot(TM) 64-Bit Server VM (build 25.0-b70, mixed mode)