Java将Comparator传递给构造函数

时间:2016-06-10 21:27:30

标签: java generics constructor comparator

如果我想传递给构造函数一个可以比较两种不同类型的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());

1 个答案:

答案 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;
    }
}
相关问题