我正在实现一个泛型arraylist类,它将遵循给定元素的自然顺序。我假设有某种方法可以做到这一点,类似于treeset如何遵循给定元素的自然顺序。
当我对存储在中的对象使用.compareto方法调用时,出现一个错误,表示“无法解析'e'中的'compareto'方法”。我如何告诉编译器对象e应该只是实现可比较接口的类?
现在,相关代码如下所示:
public class SortedList<E> {
...
public int indexOf(E value) {
...
else if (value.compareTo(this.get(minIndex)) > 1)...
}
}
这篇文章很有帮助:在接收comparable object[]时找不到compareto,但它只适用于一个特定的静态方法,而我需要整个类的对象具有可比性,同样的添加似乎不适用于类头。
有什么我可以添加到类头执行类似的功能吗?
3条答案
按热度按时间mpbci0fu1#
您必须要求您的类型参数与其自身具有可比性(因此它具有自然顺序)。可以通过限定参数来实现这一点。
yi0zb3m42#
这样指定。这个
bounded
类型允许两者E
以及subtypes of E
进行比较。m3eecexj3#
java中的多重继承非常简单,但确实存在一些问题:一个类可以实现多个接口。因此,集合可以这样声明
然后,您只能添加实现与之相当的各种类,而不必考虑类型层次结构。
然而,这种方法的实现意味着有一种方法
int compareTo(Object other)
,此方法的内部实现通常包括类型转换,并且不接受任意输入。现代java建议使用
Comparable<ToSomething>
相反,把你的可比性限制在更窄的范畴内。这个ToSomething
也不需要是你的类名,可以是另一个标记接口。