Guava中的三元运算符问题:无法从Ordering <comparative>转换为Ordering <string> </string> </comparative>

时间:2014-10-16 19:03:05

标签: java java-7 guava ternary-operator

我刚刚在Guava的Ordering课程中遇到了这种奇怪的情况。

使用三元运算符代码:

Ordering<String> ordering = flag ? Ordering.natural().nullsFirst() : Ordering.natural().nullsLast();

注意:flag是布尔变量。

我在Eclipse中显示了该行的错误:

Type mismatch: cannot convert from Ordering<Comparable> to Ordering<String>


但如果我将其更改为if-else阻止,则不会发现错误。

    Ordering<String> ordering;
    if (flag) {
        ordering = Ordering.natural().nullsFirst();
    }
    else {
        ordering = Ordering.natural().nullsLast();
    }

任何人都可以解释这里发生的事情吗?

注意:我正在使用java 7。

1 个答案:

答案 0 :(得分:3)

变化:

Ordering<String> ordering = flag ? Ordering.natural().nullsFirst() : Ordering.natural().nullsLast();

为:

Ordering<String> ordering = flag ? Ordering.<String>natural().nullsFirst() : Ordering.<String>natural().nullsLast();

这是有效的,因为它告诉Java编译器<C>方法声明中的natural应该是String。这是Guava的Orderingnatural中的方法声明:

public static <C extends Comparable> Ordering<C> natural()

通过致电Ordering.<String>natural(),您明确声明<C><String>

请注意,这适用于任何具有声明为方法声明一部分的类型的方法,就像Collections中的几乎所有静态方法一样。