程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了JDK 7中泛型和三元运算符的编译错误大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决JDK 7中泛型和三元运算符的编译错误?

开发过程中遇到JDK 7中泛型和三元运算符的编译错误的问题如何解决?下面主要结合日常开发的经验,给出你关于JDK 7中泛型和三元运算符的编译错误的解决方法建议,希望对你解决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,请注明来意。