我可以在JAVA的非分配情况下使用条件运算符吗?

时间:2018-06-20 14:09:27

标签: java

在分配情况下,情况很简单

result = testCondition ? value1 : value2;

但是,如果我想使用它而不是if语句怎么办? 例如在日志记录情况下:

logger.shouldDebbug ? logger.log("logging") : (what to do if not?);

在错误的情况下我什么都不要做,我仍然可以使用此运算符吗?

3 个答案:

答案 0 :(得分:3)

是的,可以将它们包装在返回函数中,但是不可以。

在您的记录器示例中,使记录器输出无效,在未启用调试的情况下放弃输入。

您不想将所有这些日志检查都弄混。 至少进行检查,并尽可能地集中检查。

要么在logger.log函数中进行检查(如果启用了调试功能),要么将记录器替换为除了接受输入之外不执行任何操作的虚拟模拟,然后立即将其丢弃。

如果您使用log4j之类的标准日志记录框架,则可以设置调试级别,在其中仅显示信息或更严重的信息,仅警告或更严重的信息,错误或更严重的信息。

其他“快速”检查也是如此。如果您发现自己经常使用某种模式,请在需要时使用静态方法为其编写实用程序类,这样您就可以在一个地方进行更改,而不必在执行操作时更新200个代码点投入生产。

答案 1 :(得分:0)

如果您坚持认为,可以通过定义无意义的变量并利用函数的side-effects来使用它,但这不是一个很好的编码习惯。 这纯粹是一种解决方法

例如:

public static boolean test() {
    return 1>0;
}

public static int success() {
    System.out.println("true");
    return 0; // has no meaning whatsoever
}

public static int fail() {
    System.out.println("false");
    return 0; // has no meaning whatsoever
}

public static void main(String[] args) {
    int meaningless = test() ? success() : fail();
}

答案 2 :(得分:0)

所有内容均已在注释中说明,因此我只在此处提出一些想法:

public class Ternary {
    private final boolean condition;
    private Ternary(boolean condition) { this.condition = condition; }
    public static Ternary of(boolean condition) { return new Ternary(condition); } 
    public Ternary onTrue(Runnable r) { if (condition) { r.run(); } return this; }
    public Ternary onFalse(Runnable r) { if (!condition) { r.run(); } return this; }
}

用法示例:

Ternary.of(o != null).onTrue(() -> doSomething()).onFalse(() -> doSomethingElse());

但是更简单的是写:

if (o != null) { doSomething(); } else { doSomethingElse(); }