Java 8中使用三元运算符导致泛型编译错误,但在Java 7中没有。
- 论坛
- Java 8中使用三元运算符导致泛型编译错误,但在Java 7中没有。
19 浏览
Java 8中使用三元运算符导致泛型编译错误,但在Java 7中没有。
这个类在Java 7中可以编译通过,但在Java 8中不能通过:
public class Foo { public static void main(String[] args) throws Exception { // 在Java 7和Java 8中都可以编译通过: Class extends CharSequence> aClass = true ? String.class : StringBuilder.class; CharSequence foo = foo(aClass); // 将变量内联,可以在Java 7中编译通过,但在Java 8中不能通过: CharSequence foo2 = foo(true ? String.class : StringBuilder.class); } staticT foo(Class clazz) throws Exception { return clazz.newInstance(); } }
编译错误:
错误:(9, 29) java: 无法将类Foo中的方法foo应用于给定的类型; 需要:java.lang.Class 找到:true ? Str[...]class 原因:推断类型不符合等式约束 推断:java.lang.StringBuilder 等式约束:java.lang.StringBuilder,java.lang.String
为什么在Java 8中停止工作?这是故意的/是某个其他功能的副作用,还是简单的编译器错误?