【问题标题】:What does this line conditional statement in java mean? [duplicate]java中的这条线条件语句是什么意思? [复制]
【发布时间】:2020-03-26 21:34:48
【问题描述】:
(comparison > 0 ? n : m).subtract(comparison > 0 ? m : n);

我试图弄清楚这个内联条件语句的含义以及如何将其转换为常规 if 语句。 .subtract 只是一种从 first() 中减去第二个 () 的方法。

我认为第一个 (comparison > 0 ? n : m) 与if(comparison > 0) { m = n; } 相同 不确定它如何与减法函数一起使用。代码运行正确,但我正在尝试修复警告以不使用内联条件。

谢谢!

【问题讨论】:

标签: java


【解决方案1】:

这里使用的是三元 ?: 运算符。

a ? b : c means

if (a) {
   b;
} else {
   c;
}

所以(comparison > 0 ? n : m).subtract(comparison > 0 ? m : n); 的意思是。

if (comparsion > 0) {
    n.subtract(m);
} else {
    m.subtract(n);
}

在这种情况下,n 和 m 必须是 objects,它们有一个 subtract 方法,如下所示:

比较结果 = -3 = -5
当比较 = 5 时,结果 = 3

public class TernaryDemo {
    public static void main(String[] args) {
        for (int comparison : new int[] { -5, 5 }) {
            MyClass n = new MyClass(10);
            MyClass m = new MyClass(7);
            MyClass result = (comparison > 0 ? n : m)
                    .subtract(comparison > 0 ? m : n);

            System.out.println("result = " + result
                    + " when comparison = " + comparison);
        }
    }
}

class MyClass {
    int v;

    public MyClass(int v) {
        this.v = v;
    }

    public MyClass subtract(MyClass cls) {
        return new MyClass(this.v - cls.v);
    }

    public String toString() {
        return v + "";
    }

}

【讨论】:

  • 除非很遗憾,subtract 返回 void,在这种情况下,您不能在纯 Java 中使用三元(Groovy 和 Kotlin 将允许)。
  • 是的:我更新了答案以包含演示。
【解决方案2】:

这是你可以自己测试的东西。

但是,它转换为:

Subtractable sub, sub2; // This is how I am going to call the class that has the subtract method

if(comparison > 0)
    sub = n;
else
    sub = m;

// You could put these in the same if statement, but this is closer to what actually happens.
if(comparison > 0)
    sub2 = m;
else
    sub2 = n;

sub.subtract(sub2);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-22
    • 2023-02-22
    • 1970-01-01
    • 1970-01-01
    • 2013-07-13
    • 2015-01-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多