【问题标题】:How to write following code with Conditional(Ternary) Operator?如何使用条件(三元)运算符编写以下代码?
【发布时间】:2015-11-30 10:27:25
【问题描述】:

我只是在玩我的代码。 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

【问题讨论】:

  • doc.close() 是否返回任何内容?如果不是,则不能在三元条件运算符中使用。
  • 我也考虑在此处使用try-with-ressources 版本来关闭Document
  • 是的,close() 是返回布尔值。
  • 那么您需要将 doc.close() 分配给一个布尔变量,并在 else 部分包含类似 false 的内容。

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


【解决方案1】:

您可以在此处使用三元运算符(使用虚拟布尔值并且不再使用):

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

但我强烈建议不要使用这种代码。如果您认为“1-liner”在此处可能可读,请考虑执行以下操作:

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

编辑:

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

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

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

【讨论】:

  • 但是那个 boolean 有什么用呢? :)
  • “但我强烈建议不要使用这种代码”我同意,但请解释原因。
  • @sᴜʀᴇsʜᴀᴛᴛᴀ 没有用;) 它只是为了能够使用三元运算符而存在
【解决方案2】:

没有。三元运算符不能这样使用。

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

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

【讨论】:

    猜你喜欢
    • 2018-06-27
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 2013-10-30
    • 2010-09-28
    相关资源
    最近更新 更多