如果我想传递给构造函数一个可以比较两种不同类型的Comparator,那么构造函数的参数应该是这样吗?:
public MyClass(Comparator<?> comp) {
this.comp = comp;
}
然后我的比较器类:
public NameComparator implements Comparator<String> {
@Override
public int compare(String s1, String s2) {
return s1.compareTo(s2);
}
}
然后每当我实例化我做的课时:
MyClass myClass = new MyClass(new NameComparator());
这是正确的方法吗?
由于
编辑:
以下是相关代码:
public class BST<T> {
/* binary search tree */
...
private Comparator<T> c;
/* pass in comparator to constructor*/
public BST(Comparator<T> c) {
this.c = c;
}
比较
public class NameComparator implements Comparator<String> {
@Override
public int compare(String s1, String s2) {
return s2.compareTo(s1);
}
}
当我创建BST时:
BST bst = new BST(new NameComparator());
答案 0 :(得分:0)
您的要求似乎有点特殊,您无法使用泛型类型,因为String
是最终类,您的“特殊类”无法扩展。
您可以使用标记接口来完成这项工作,这两个Comparator
类都需要实现:
/** Marker interface for special comparators */
public interface SpecialComparator{}
public class NameComparator implements Comparator<String>, SpecialComparator{
@Override
public int compare(String s1, String s2) {
return s2.compareTo(s1);
}
}
public class BST {
/* binary search tree */
...
private SpecialComparator c;
/* pass in comparator to constructor*/
public BST(SpecialComparator c) {
this.c = c;
}
}