【问题标题】:Ternary passing of arguments [closed]参数的三元传递[关闭]
【发布时间】:2013-05-24 15:04:32
【问题描述】:

在 Java 中是否可以使用三进制将多个参数传递给方法调用?

例如 - 在一个方法中有:

    print(degree == 270 ? "e", 5 : "t", 6);

调用:

    public void print(String s, int t){

    }

通过使用三元,我想传入 e 和 5 OR t 和 6。无需复制代码 - 比如:

    print(degree == 270 ? "e" : "t", degree == 270? 5 : 6);

我想有些人不明白,我不想用上面的这个方法,它运行检查是不必要的时间。

【问题讨论】:

  • 我认为degree == 270 ? print("e", 5) : print ("t", 6); 是最容易阅读的。
  • @Tom 在语句上下文中不起作用,这是 OP 的情况。
  • @Tom 仅当 print 方法的返回类型不为 void 时
  • @SubhrajyotiMajumder 甚至没有,当用作表达式语句时,这显然是这里的意图。
  • 我很确定不可能按照 OP 的要求去做,这就是为什么我提供我认为最好的解决方案

标签: java ternary-operator operation ternary


【解决方案1】:

如果您的表达式包含一个包装器对象,该对象具有两个值(s 和 t)作为变量,那么这是可能的,但是您必须实例化两者。为了使您的代码更好,我会尝试以下方法:

if(degree == 270) {
    print("e", 5);
}
else {
    print("f", 6);
}

switch(degree) {
    case 270:
        print("e", 5);
        break;
    default:
        print("f", 6);
        break;
}

只要您与绝对值(而不是范围)进行比较。

我知道这不是您要查找的内容,但通常,在企业环境中,建议使用这种表示法,因为对于其他人来说,它最容易理解,可以维护代码并减少新手出现错误的风险程序员必须改变一些东西。

最后,无论哪种方式,编译后的代码都将是高效的。实际上,我认为您的第二个选项将通过条件表达式两次,在这种情况下,最好只使用我编写的其中一个选项。

问候

【讨论】:

  • 我在工业界工作,有人告诉我三元组更容易维护和查看。我知道包装它会起作用,但这是不必要的。还是谢谢。
  • 三元组很棒,我同意。 return test? "a" : "b"if (test) return "a" else return "b" 给读者带来的精神负担要少,因为在前一种情况下,我们预先知道我们将无条件返回,并且只剩下决定什么,而对于if,我们必须仔细检查这两个子句以确保。
  • 嗯,这始终是每个企业中人们的意见问题。但是,较长的代码确实很容易查看。有风险的是,如果您不在 1 行 if 语句上使用大括号,程序员通常会添加一行并忘记没有大括号......最后,我认为这是一个编码标准的问题...... .
  • @Marko 我同意,特别是在您声明的情况下,因为您避免在一个方法中使用多个 return 语句,这通常也被认为是一种不好的做法......正如我所说,它通常取决于关于企业的政策...
【解决方案2】:

为什么不

    (degree == 270) ? print("e", 5) : print("t", 6);

编辑:显然在 java 中不起作用:/

【讨论】:

  • 认真的吗?我很确定它至少在 C++ 中是这样的
  • 检查您和 OP 的版本很容易:)
  • upps,谢谢汤姆。 @Marko:如果您仔细观察,我的和 OP 之间存在细微差别;)。但是好的,如果 java 不允许这样做.. 到底是什么。
  • 我是说 OP 检查他的版本就像你检查你的一样容易。不过,你们俩都会找到相同的答案。
  • 是的,这本来可以正常工作,但如上所述,不能编译.. :(
【解决方案3】:

条件表达式(这是正式名称)是一个表达式,就像任何其他 Java 表达式一样。就周围的方法调用而言,只有它的结果很重要。很明显,你不能使用一个表达式来指定两个参数,因为每个参数都是它自己的表达式。

【讨论】:

  • 这并不是问题的真正答案。他询问是否可以根据条件返回 MULTIPLE 结果。
  • 哦,现在我明白了。谢谢。
猜你喜欢
  • 2017-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-25
  • 1970-01-01
  • 1970-01-01
  • 2020-01-19
  • 2013-10-09
相关资源
最近更新 更多