为什么像这样使用三元数不正确?

//Error when using as ternary
Character.isDigit(myDto.getNameStr().charAt(0)) ? digitArrayList.add(myDto) : charArrayList.add(myDto);

//OK when used as if ... else
char c = myDto.getNameStr().charAt(0);
if(Character.isDigit(c)) {
  digitArrayList.add(myDto);
} else {
  charArrayList.add(myDto);
}

最佳答案

三元条件语句不能作为独立语句使用。仅某些表达式允许作为独立语句使用,例如赋值或方法调用。

JLS将允许作为独立语句使用的那些表达式分类为 StatementExpression :

分配
预增量表达
PreDecrementExpression
后增量表达
后递减表达式
方法调用
ClassInstanceCreationExpression

无论如何,这里有几种晦涩的方法来使用三元:

// statement is an assignment
boolean ignored =
    Character.isDigit(...) ?
        digitArrayList.add(myDto) : charArrayList.add(myDto);

// statement is a method invocation
(Character.isDigit(...) ? digitArrayList : charArrayList)
    .add(myDto);

但我不建议您使用它们,它们只是出于好奇。仅使用if...else更加清楚。

09-27 11:59