【问题标题】:Converting if/else-if/else to ternary operator in Java在 Java 中将 if/else-if/else 转换为三元运算符
【发布时间】:2017-05-05 07:41:37
【问题描述】:

我正在尝试使用三元运算符 ?-:if-else 语句转换为相等语句

我的目标是转换这段代码:

if (s instanceof Class1) {
    do_something((Class1) s);
} else if (s instanceof Class2) {
    do_something_else((Class2) s);
} else {
    do_that((Class3) s);
}

我做了这样的事情:

(s instanceof Class1) ? do_something((Class1) s):
                     ((s instanceof Class2) ? (do_something_else(Class2) s))) :
                     (do_that((Class3) s));

我调用的三个方法只是返回 void。

我在编写时遇到了一些语法错误。有人可以帮助或解释我错过了什么吗?提前致谢

【问题讨论】:

  • 您不能将voids 用作 ternar 运算符的一部分。只有两种相同的类型。
  • 三元运算符不适用于 void 方法
  • "第二个或第三个操作数表达式调用 void 方法是编译时错误。" docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.25
  • 使用嵌套三元运算不是一个好习惯..
  • 您可以将您的类放入一个层次结构中,其中每个类都实现一个接口,每个类中所需的操作是一个覆盖。那是面向对象的编程,避免了随意反射的整个麻烦、脆弱和容易出错的行为。您真的根本不想使用反射。对于您在此处显示的内容,标准编程技术很有可能为您提供更好的服务。

标签: java if-statement ternary-operator


【解决方案1】:

你不能这样做的原因有两个:

  1. 您不能只使用任何独立表达式作为语句。与某些语言(例如 JavaScript)不同,Java 没有“表达式语句”的一般概念,只有一些表达式也允许作为语句(如方法调用)。

  2. 条件运算符必须有结果,但如果你的方法是void,它们不会产生结果。

只需保留if/else


旁注:if/elseinstanceof 的系列往往暗示了一个设计问题,可以用更简洁的方式解决。

【讨论】:

  • 谢谢,这就是我所缺少的。
  • Side Note
猜你喜欢
  • 2021-03-17
  • 2021-02-22
  • 1970-01-01
  • 1970-01-01
  • 2021-07-09
  • 1970-01-01
  • 1970-01-01
  • 2012-07-11
  • 2018-10-25
相关资源
最近更新 更多