编写容器通用比较器的更好方法

时间:2014-07-17 09:54:07

标签: java generics

我有一个像这样的容器对象:

class Container<V> {
    V value;
}

并希望为其编写Comparator,只有在value具有可比性时,才应与class ValueComparator<V extends Comparable<V>, C extends Container<V>> implements Comparator<C> { @Override public int compare( C o1, C o2 ) { return o1.value.compareTo( o2.value ); } } 进行比较。

我能想到的最好的是:

    Container<String> x1, x2;

    new ValueComparator<String,Container<String>>().compare( x1, x2 );
                        ^^^^^^ ?

可以这样使用:

    new ValueComparator<Container<String>>().compare( x1, x2 );

问题是:有没有更好的方法来实现这一点,以便摆脱冗余类型信息,以便我可以写:

{{1}}

1 个答案:

答案 0 :(得分:3)

您可以像这样更改ValueComparator声明:

class ContainerComparator<V extends Comparable<V>> implements Comparator<Container<V>> {
    @Override
    public int compare(Container<V> o1, Container<V> o2 ) {
        return ...;
    }
}

现在您可以使用单个类型参数声明它:

new ContainerComparator<String>().compare(x1, x2);