将 if/else 转换为三元运算符 Java

Convert if/else to ternary operator Java

我的函数 setA() 如下所示:

public double setA(){
    double a;
    
    aField.getText() == null || aField.getText().trim().isEmpty() ? a = 1 : a = Double.parseDouble(aField.getText());

    //a = aField.getText() == null || aField.getText().trim().isEmpty() ? a = 1 : a = Double.parseDouble(aField.getText());

    //return aField.getText() == null || aField.getText().trim().isEmpty() ? a = 1 : a = Double.parseDouble(aField.getText());

    /*if(aField.getText() == null || aField.getText().trim().isEmpty())
        a = 1;
    else
       a = Double.parseDouble(aField.getText());*/
   
    return a;
}

我想去掉 if/else 并用三元运算符重写它。 None 这 3 个三元选项有效,并且在构建中,它们显示相同的错误:

java: unexpected type required: variable found: value

与此同时,注释 if/else 块工作得很好。 将 TextField aField 传递到函数中并完成此操作。没有帮助 + 在构建之前我明白了

Variable 'a' might not have been initialized

怎么了?

试试这个:

a = (aField.getText() == null || aField.getText().trim().isEmpty())
 ? 1.0 : Double.parseDouble(aField.getText());

看起来不错,除了你设置 a变量的方式。

double a = <condition> ? <true> : <false>:

您还可以使用 Apache 实用程序来简化代码。

import org.apache.commons.lang3.StringUtils;

public double setA() {
    return StringUtils.isBlank(aField.getText()) ? 1 : Double.parseDouble(aField.getText());
}

public double setA() {
    String str = aField.getText();
    return str == null || str.trim().isEmpty() ? 1 : Double.parseDouble(str.trim());
}

你的三元尝试的问题是它们没有在语法方面得到纠正:

//a = aField.getText() == null || aField.getText().trim().isEmpty() ? a = 1 : a = Double.parseDouble(aField.getText());

对于 Java 语言规范 (§15.25):

15.25。条件运算符? :

The conditional operator ? : uses the boolean value of one expression to decide which of two other expressions should be evaluated.

ConditionalExpression: ConditionalOrExpression ConditionalOrExpression ? Expression : ConditionalExpression

所以在你的例子中是一个 =(条件表达式)? 'a' 的值 if conditional expression 为真 : 'a' 的值,如果 conditional expression 为假;

a = aField.getText() == null || aField.getText().trim().isEmpty() 
  ? 1 
  : Double.parseDouble(aField.getText());