java - 比较我类的两个泛型的更好选择。

标签 java class generics

我需要帮助。 有没有更好的版本来比较“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;
    }

这是我当前的解决方案。但我做的事情是一个非常难看的解决方案。 有没有更好的办法解决这个问题?

谢谢

最佳答案

您的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()); 创建.

关于java - 比较我类的两个泛型的更好选择。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46779153/

相关文章:

java - 如何限制 gridview 中的文本长度并使单元格正方形

java - 您是否在资源类或服务类中进行输入参数验证?

java - 如何在 Java 中设计一个通用类来检查提供给它的允许值?

javascript - zClip 不起作用 - 多次复制到剪贴板 JS

python - 尝试将类(在列表中)保存到文件中

TypeScript - 通用约束可以提供 "allowed"类型吗?

java - 在条形图 AChartEngine 中向 Y 轴标签添加 % 符号

java - 将 MS Word 文档与 Java 合并

c# - 如何在不知道类型的情况下实例化通用列表

java - 如何使用 E... 元素编写 Java 泛型方法并返回 List<E>