【问题标题】:Possibilities to short if-conditions in Java在 Java 中缩短 if 条件的可能性
【发布时间】:2015-05-19 01:31:21
【问题描述】:

如果我想缩短这个 if 条件

if (x) {
    x = false;
} else {
    x = true;
}

我使用以下代码:

x = !x;

但是如果我想缩短这段代码怎么办?有没有办法做到这一点?如果是,怎么做?

if (x) {
  method_1();
} else {
  method_2();
}

【问题讨论】:

  • 这不会“缩短”任何字节码;即使在第一种情况下,JVM 也可能足够聪明,可以将第一个代码转换为第二个代码。一无所获。
  • 我想不出比x = !x更小的东西了。
  • 取决于你的方法在做什么。但是对于给定的一组代码,你不能再缩短它了。
  • 您当然会获得可读性。
  • @amahfouz 对该代码进行任何调整以提高可读性几乎不会提高可读性。有时我们会犯更多的罪,试图少做或不做。

标签: java if-statement methods conditional-statements short


【解决方案1】:

您可以使用 ? : 声明

x ? method_1() : method_2()

有时,像这样将其拆分为多行更具可读性:

isSomethingTrue 
   ? method_1() 
   : method_2()

*编辑

确切地说,正如其他人所评论的那样,您需要将返回值分配给某个变量。所以这段代码实际上看起来像这样:

someVar = isSomethingTrue 
   ? method_1() 
   : method_2()

这意味着你不能用 void 方法做到这一点。

【讨论】:

  • 我认为这行不通。在条件表达式中BC 部分不应为空表达式。
  • 并非如此。试试看。
  • 那甚至不会编译;您需要有一个返回值的有效表达式。
  • 是的,为什么你认为这些方法是无效的?!他们可能会返回一个 int 或 boolean。
  • @Apurva 不完全是。条件运算符的使用有限制。你不能这样做:bool-expr ? Sysout("hello") : Sysout("there"),你可以使用 if-else 来做到这一点。
【解决方案2】:
 x=!x; is a good logic :)

你可以使用选择语句

 x = x==true?false:true; 

【讨论】:

  • 它比x = !x 更好吗?此外,它具有高度的不可读性。
  • 它并不比 x =!x 好,但是如果您需要在检查时执行多个语句怎么办? x=!x 是一个非常简单易读的语句..
  • 然后我将使用简单的if-else 语句,而不是将代码与那些条件表达式进行卷积。首先,您不应该进行布尔比较 - x == true 几乎应该总是写成 x。其次,您不能在条件语句中执行任何其他语句。所以这不会解决您的目标。
  • 当然,这是非常正确的..x=!x 不是我的解决方案,这就是他所做的..我只是赞扬了他的逻辑..我知道你的意思是什么吗?
  • 我的意思是,您的回答并没有为问题增加任何价值。
【解决方案3】:

我喜欢 amahfouz 的回答。只是想补充一点,您可以使用 lambdas 来持久化short。这样可以避免每次都检查状况……使短路永久化。

public class TestLambdas {

    /**
     * @param args the command line arguments
     */
    Function<String, String> myMethod;
    Function<String, String> myMethod_1 = (String y) -> {
        return y;
    };
    Function<String, String> myMethod_2 = (String y) -> {
        return y.trim();
    };

    public TestLambdas(boolean x) {
        myMethod = x
                ? myMethod_1
                : myMethod_2;

    }

}

所以现在您可以拨打myMethod() 而无需检查条件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-05
    • 2014-05-07
    • 2016-10-02
    • 1970-01-01
    • 2022-01-17
    • 2011-09-26
    • 1970-01-01
    相关资源
    最近更新 更多