【问题标题】:How to compare fields of unrelated classes?如何比较不相关类的字段?
【发布时间】:2015-10-11 08:16:40
【问题描述】:

products 是不同类的实例列表(由抽象类 C 扩展的 A 类、B 类) 两个类都有方法getNumber()

public void sortByNumber() {
        Collections.sort(products, new Comparator<T>() {
            public int compare(T o1, T o2) {
                return ((T) o1).getNumber().compareTo(((T o2).getNumber());
            }
        });
    }

我需要访问 o1.getNumber()o2.getNumber() 方法来比较字段。
有错误:

The method getNumber() is undefined for  the type T

【问题讨论】:

  • 也许您想实现Comparator&lt;C&gt; (Comparator&lt;Product&gt;) 而不是Comparator&lt;T&gt;?如果你还没有,你必须在 C 中声明一个 abstract getNumber() 方法。

标签: java sorting collections compare comparator


【解决方案1】:

你还没有展示类型参数T是如何定义的,但是如果没有上限,那么编译器就不能假设除了属于Object的方法之外还有任何方法可以在@上调用987654323@和o2

如果您的不同类的实例都实现了定义getNumber 的某个接口,那么您所要做的就是添加该接口的上限。

public class YourClass<T extends HasNumber>  // Your names may vary

如果您的类没有实现该接口,那么您将需要创建这样一个接口并让这些类实现该接口。

【讨论】:

  • 我只需要对产品列表进行排序。但是当我尝试比较产品时,它们可能属于不同的类别。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-15
  • 2022-12-08
  • 1970-01-01
  • 2018-07-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多