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

时间:2015-11-30 10:27:26

标签: java conditional-operator try-catch-finally

我正在玩我的代码。 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转换为布尔值

  • 令牌“!=”上的语法错误,AssignmentOperator无效

2 个答案:

答案 0 :(得分:4)

你可以在这里使用三元运算符(使用虚拟布尔值和再次使用):

boolean dummy = doc != null ? doc.close() : false;

但我强烈建议不要使用这种代码。如果你认为一个" 1-liner"在这里可以阅读可以考虑做类似的事情:

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

修改

解释为什么不使用这种代码:

你会创建一个布尔值,它永远不会再次使用而不会获得任何东西。

  • 三元运算符并不比if条件快
  • 在这种情况下代码变得不可读
  • 如果dummydoc
  • ,则布尔值null仍包含布尔值

答案 1 :(得分:3)

没有。三元运算符不能以这种方式使用。

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

如果仔细查看已注释的代码,则根本没有其他部分。你只有if和三元运算符才能确定需要别的。因此不可能。