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

有没有办法在使用三元运算符的return语句中抛出异常?

华宪
2023-03-14

我有一个函数在某些情况下返回null,比如:

public Class Foo {
    public static Double bar(double a, double b) {
        if (a == 0 || b == 0) return null;
        return a + b;
    }
}

我想做另一个函数,它做完全相同的事情,除了它抛出一个错误,而不是返回null如果满足这个条件。我试着这么做:

public Class Foo {

    public static Double bar(double a, double b) {
        if (a == 0 || b == 0) return null;
        return a + b;
    }

    public static Double barWithException(double a, double b) {
        return bar(a, b) == null ? throw new IllegalArgumentException() : bar(a, b);
    }

}

不幸的是,Java不喜欢这样做,并在“throw”令牌上给我一个语法错误(并告诉我它不能从IllegalArgumentException转换为Double)。我能想到的唯一其他方法是这样的:

public Class Foo {
    
        public static Double bar(double a, double b) {
            if (a == 0 || b == 0) return null;
            return a + b;
        }
    
        public static Double barWithException(double a, double b) {
            if (bar(a, b) == null) throw new IllegalArugmentException();
            return bar(a, b);
        }
    
    }

这当然是完全好的,我只是想知道是否有一种方法可以在一行中完成这一点,或者将异常抛出集成到条件运算符中。非常感谢任何帮助。

共有1个答案

储法
2023-03-14

您可以为此使用optional

return Optional.ofNullable(bar(a, b))
        .orElseThrow(() -> new IllegalArgumentException());
 类似资料:
  • 问题内容: 我在实现Runnable的类中的run()中调用的方法被设计为引发异常。 但是Java编译器不允许我这样做,建议我用try / catch包围它。 问题是,通过用try / catch包围它,我使 特定的 run()无效了。我 确实 想抛出该异常。 如果我指定的run()的本身,编译器会抱怨说。 通常,我对run()不会抛出异常完全满意 。但是,在我必须具有该功能的特殊情况下。 如何解

  • 问题内容: 我一直不得不放置没有任何其他条件的其他条件。反正周围有吗?例如 基本上,有什么方法可以做: 现在它显示为语法错误 仅供参考,这是一些真实的示例代码: 问题答案: 首先,三元表达式不能替代if / else构造-它等同于 返回 值的if / else构造。也就是说,if / else子句是code,三元表达式是 expression ,表示它返回一个值。 这意味着几件事: 仅当在变量的左

  • 三元运算符 三元运算符 ? 应该只用在它能让代码更加清楚的地方。 一个条件语句的所有的变量应该是已经被求值了的。类似 if 语句,计算多个条件子句通常会让语句更加难以理解。或者可以把它们重构到实例变量里面。 推荐: result = a > b ? x : y; 不推荐: result = a > b ? x = c > d ? c : d : y; 当三元运算符的第二个参数(if 分支)返回和条

  • 问题内容: 请解释为什么异常出现在第一个程序中而不是第二个程序中。 1)在read方法中没有return语句 2)在读取方法中使用return语句 问题答案: 最终不应该在内部使用分支语句(return,goto),因为这样的语句的执行会使在最终之前执行的其他指令无效。 在Java语言规范说:如果try块的执行任何其他原因[R突然结束,那么finally块被执行,然后有一个选择: 如果finall

  • 我有以下python代码: 这里发生了什么?我无法理解这一点,因为不是布尔值。

  • rank ▲ ✰ vote url 5 1187 203 1370 url 在Python中有三元运算符吗? 如果没有,可以像其他语言用的简单方法来实现吗? 有,在2.5版本中加入.对于python初学者可能有点难以理解,所以要记住了. 语法如下: a if test else b 根据test的布尔值来判断返回的是a还是b;如果test为真则返回a,反之则返回b. 来个大栗子: >>> 'tr