如果没有其他三元运算符

时间:2013-11-18 16:52:57

标签: java if-statement ternary-operator

到目前为止,我一直在搜索网络,语句总是有if和else条件,例如a ? b : c。我想知道if三元语句是否可以在没有else的情况下使用。 假设我有以下代码,我希望关闭PreparedStatement如果它不为空

(我使用的是Java编程语言。)

PreparedStatement pstmt;

//.... 

(pstmt!=null) ? pstmt.close : <do nothing>;

11 个答案:

答案 0 :(得分:46)

No, you cannot do that. 相反,试试这个:

if(bool1 && bool2) voidFunc1();

答案 1 :(得分:13)

写出来?

if(pstmt != null) pstmt.close();

它的长度完全相同。

答案 2 :(得分:13)

为什么只有一个选择时使用三元运算符?

if (pstmt != null) pstmt.close(); 

就够了!

答案 3 :(得分:9)

三元if运算符是特定的三元运算符。独一无二。

来自Wiki:

  

在数学中,三元运算是n-ary运算,n = 3。

这意味着你需要所有3个操作数。

答案 4 :(得分:9)

如其他答案中所述,您不能使用三元运算符来执行此操作。

但是,如果需要你,你可以使用Java 8 Optional和lambdas将这种逻辑放在一个语句中:

Optional.of(pstmt).ifPresent((p) -> p.close())

答案 5 :(得分:8)

三元运算被称为三元运算,因为它需要3个参数,如果需要2则是二进制运算。

如上所述,它是一个表达式返回一个值。

如果省略else,则会有一个未定义的情况,表达式不会返回值。

正如其他答案中所述,您应该使用if 语句

答案 6 :(得分:0)

不能没有其他使用三元组,但是要在一行中执行“ if-without-else”,可以使用Java 8 Optional类。

PreparedStatement pstmt;

//.... 

Optional.ofNullable(pstmt).ifPresent(pstmt::close); // <- but IOException will still happen here. Handle it.

答案 7 :(得分:0)

pstmt != null && pstmt.close;

上面的代码行转换为“表达式的左侧翻译为true时->执行右侧”。

答案 8 :(得分:-1)

使用JavaScript,您可以轻松做到:

expression ? doAction() : undefined

因为这实际上是在真实的if语句中实际发生的情况,所以else子句只是未定义。我想像您可以在几乎任何一种编程语言中执行几乎相同的操作,因为else子句只需放置一个不返回值的空类型变量,就不会引起任何编译错误。

答案 9 :(得分:-1)

是的,您can实际上(至少在JavaScript中)做到了:

condition && x = true;

或(在JavaScript中,在Java中可能有类似的方法):

void(condition && x = true)

答案 10 :(得分:-2)

在构建具有可选元素的数组时,不能使用三元组似乎是一种耻辱。

my $yn = 'N';
my $foo = [ { n => 'a' }, 
    ( $yn eq 'Y' ? { n => 'b' } : undef),
    { n => 'c' } ];
say Dumper $foo;

你真的不需要任何东西,而不是undef或空字符串。

这也为你提供了一个空元素,而不是'没有'。

my $yn = 'N';
my $foo = [ { n => 'a' },
$yn eq 'Y' && { n => 'b' },
{ n => 'c' } ];
say Dumper $foo;