我需要帮助的人。 有没有更好的版本来比较这个类“TreeBag”中的两个泛型?
我目前的解决方案是:
public class TreeBag<T> implements Bag<T>, Comparator<T> {
.
.
.
@Override
public int compare(T o1, T o2) {
int temp = Integer.parseInt(o1.toString()) - Integer.parseInt(o2.toString());
if (temp < 0)
return -1;
else if (temp > 0)
return 1;
else
return 0;
}
这是我目前的解决方案。但我做的事情是一个非常难看的解决方案。 这个问题有更好的解决方案吗?
由于
答案 0 :(得分:1)
您的TreeBag
不应该 一个比较器,它应该 一个比较器:
public class TreeBag<T> implements Bag<T> {
private final Comparator<? super T> comparator;
public TreeBag(Comparator<? super T> comparator) {
this.comparator = Objects.requireNonNull(comparator, "comparator");
}
/// and somewhere
void somewhere() {
T o1 = ....;
T o2 = ....;
int rc = comparator.compare(o1, o2);
if (rc < 0) {
} else if (rc > 0) {
} else {
}
}
}
例如,TreeBag<String>
将使用new TreeBag<String>(String.CASE_INSENSITIVE_ORDER);
创建。
然后会使用TreeBag<Integer>
创建new TreeBag<Integer>(Comparator.naturalOrder());
。
答案 1 :(得分:0)
为了做正确的比较,比较者必须知道应该比较什么。
改善设计的几种方法:
<T extends Comparable>
并使用o1.compareTo(o2)
<T extends YourDomainObject>
并在YourDomainObject
方法compare
编写特定逻辑
TreeBag
具体类方法中YourDomainObject
抽象并为compare
编写具体逻辑:MyTreeBag extends TreeBag<YourDomainObject> { ...