当前位置: 首页 > 知识库问答 >
问题:

Java8中的三元运算符,用Maven编译

莘康裕
2023-03-14

请考虑此类:

package be.duo.test;

public class Main {

    public static void main(String[] args) {
        Main main = new Main();
        main.execute();
    }

    private void execute() {
        for(int i = 0; i < 10; i++) {
            System.out.println("" + method());
        }
    }

    private int method() {
        return (Math.random() > 0.5d) ? 1 : null;
    }

}
    null
[ERROR] error: incompatible types: bad type in conditional expression
[ERROR] <null> cannot be converted to int

共有1个答案

仲孙献
2023-03-14

据我所知,在Java8下应该是合法的。

见表15.25-E。条件表达式类型(参考第3操作数,第三部分):

3rd → null
2nd ↓        
int   lub(Integer,null)

lub(Integer,null)应为Integer。基本上,如果您有一个形式为布尔 ;? int ;: null的条件,表达式的结果应该是integer并且它将被取消装箱。(我想你已经知道这是会发生的事情了。)

因此,根据规范,它应该是相同的。

好像是编译器的错误。有相当多的这些发现,我会说尝试更新到最新的版本。

 类似资料:
  • 条件(三元)运算符是 JavaScript 仅有的使用三个操作数的运算符。一个条件后面会跟一个问号(?),如果条件为 truthy ,则问号后面的表达式A将会执行;表达式A后面跟着一个冒号(:),如果条件为 falsy ,则冒号后面的表达式B将会执行。本运算符经常作为 if 语句的简捷形式来使用。(MDN) 三元运算符,也称条件运算符、三目运算符。 三元运算符可以代替简单的 if 语句。 1. 语

  • 据我所知,PowerShell似乎没有一个针对所谓三元运算符的内置表达式。 例如,在支持三元运算符的C语言中,我可以编写如下内容: 如果PowerShell中并不存在这种情况,那么实现相同结果的最佳方法(即易于阅读和维护)是什么呢?

  • 问题内容: 为什么会产生错误,应如何写? 错误是“找不到<接受提供的参数的重载” 问题答案: 您的三元运算符在那里不工作的 原因 是由于各种中缀运算符的优先级。您可以在此处查看运算符优先级列表。如果您看一下,会发现底部的运算符通常是放置在较大代码段之间的运算符。优先级越高,它将越紧紧抓住左侧(或右侧)的表达式。因此,您通常希望您的运算符具有非常低的关联性,因此在类似以下的表达式中: 该会抢在它两侧

  • 本文向大家介绍c#中的三元运算符是?相关面试题,主要包含被问及c#中的三元运算符是?时的应答技巧和注意事项,需要的朋友参考一下 三元运算符,有的也称三目运算符,是对if else  双分支条件语句的简化 格式如下: 表达式一?表达式二:表达式三        释义:如果表达式一为真,就执行问号后边紧跟着的表达式,也就是表达式二;             否则执行冒号后边的表达式,即表达式三。 等价

  • 问题内容: 如何用elseif部分编写PHP三元运算符? 我看到了带有PHP三元运算符和的基本示例,如下所示: 我如何将这样的“ elseif”部分放入三元运算符中? 问题答案: 三元不是您想要的一个很好的解决方案。它不会在您的代码中可读,并且有很多更好的解决方案可用。 为什么不使用数组查找“ map”或“ dictionary”,如下所示: 此应用程序的三元最终看起来像这样: 为什么这样不好?因

  • 问题内容: 是否可以更改此: …对三元运算符? 问题答案: 好吧,中的行为就像这样…… …另一种看待它的方式… 你的问题有点含糊,我们必须在这里假设。 如果(且仅当)声明了一个返回值(,等。)-现在看来似乎没有做到这一点通过你的代码-那么你可以做到这一点… 如果callFunction(…)不返回值,那么你将无法使用三元运算符!就那么简单。你将使用不需要的东西。 请发布更多代码以清除所有问题 尽管