如何使用条件(三元)运算符编写以下代码?

4

我只是在玩我的代码。if else块中的代码可以用条件运算符(?:)来编写。 以下是如何使用条件运算符编写以下代码。

  import com.itextpdf.text.Document;

public class TEst {
    public static void main(String[] args) {
        Document doc=null;
        try{
         doc=new Document();
        //some operation.
        }catch(Exception e){

        }finally{
            doc!=null? doc.close():"";

            //if(doc!=null){
            //  doc.close();
            //}
        }
    }

Eclipse建议:

此行多个标记

  • 类型不匹配:无法将null转换为boolean

  • 在“!=”上语法错误,无效的赋值运算符


1
doc.close() 返回任何东西吗?如果不是,它不能在三元条件运算符中使用。 - Eran
2
我建议在这里使用try-with-resources版本来关闭Document - SomeJavaGuy
是的,close() 返回布尔值。 - 2787184
然后你需要将 doc.close() 分配给一个布尔变量,并在 else 部分包含类似于 false 的内容。 - SomeJavaGuy
2个回答

4
您可以在这里使用三元运算符(使用虚拟布尔值并不再次使用它):
boolean dummy = doc != null ? doc.close() : false;

但是我非常建议不要使用这种代码。如果你认为在这里使用“一行代码”可能更易读,请考虑采用以下做法:

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

编辑:

以下是不建议使用此类代码的原因:

你会创建一个从未被使用过的布尔值,而没有任何收益。

  • 三元运算符并不比if条件语句更快
  • 在这种情况下,代码变得难以阅读
  • 如果docnull,那么布尔值dummy仍然包含一个布尔值

但是那个布尔值有什么用呢? :) - Suresh Atta
但我强烈建议不要使用这种代码。我同意,但请解释原因。 - Andy Turner
@sᴜʀᴇsʜᴀᴛᴛᴀ 没有用处 ;) 它只是存在于能够使用三元运算符。 - ParkerHalo

3
不行。三元运算符不能这样使用。
//if(doc!=null){
    //  doc.close();
    //}

如果您仔细查看代码注释,就会发现根本没有else部分。您只有if和三元运算符需要一个else,因此不可能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接