大佬教程收集整理的这篇文章主要介绍了JDK 7中泛型和三元运算符的编译错误,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
JLS SE 8在(§15.2)中说:
因此,从规范的这一部分可以清楚地看出,条件表达式(即三元运算符)可以视为多表达式。但是,并非所有条件表达式都可以视为多表达式,只能引用根据(§15.25)的条件表达式。(§15.25.3)阐明了可以将参考条件表达式视为多表达式的条件:
检查示例中条件表达式是否出现在赋值上下文中,因为根据(§14.17):
那么到最后,这意味着什么?这意味着,当条件表达式为多边形表达式时,目标类型将“推入”到每个操作数中。这样,编译器可以将条件的每个部分归于目标。您的目标是List<String>
。如果我们检查emptyList()方法的定义,我们将:
@SuppressWarnings("unchecked")
public static final <T> List<T> emptyList() {
return (List<T>) EMPTY_List;
}
因此,使用target List<String>
,编译器可以推断出T == String且代码已被接受。
我在编写一些Java代码时遇到了编译失败,我将其简化为以下测试用例:
import java.util.Collections;
import java.util.List;
public class TernaryFailure {
public static List<String> thisWorks() {
return Collections.emptyList();
}
public static List<String> thisFailsToCompile() {
return true ? Collections.emptyList() : Collections.emptyList();
}
}
上面的代码无法javac
使用JDK 1.7.0_45 进行编译:
但是,使用JDK 1.8.0_05编译时不会出现任何错误。
这是Java 7实现中的错误吗?还是对Java 8中的Java语言规范进行了增强以开始允许这样做-如果是这样,有什么变化?
以上是大佬教程为你收集整理的JDK 7中泛型和三元运算符的编译错误全部内容,希望文章能够帮你解决JDK 7中泛型和三元运算符的编译错误所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。