我有一个像这样的容器对象:
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}}
答案 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);