[英]How can a custom parameterized list object be created in Java with Comparables?
我试图在Java中创建一个自定义列表对象,该对象将在“ <>”中具有参数化类型(如ArrayLists)。 但是,这些参数化类型需要实现Comparable接口(因为列表将自动排序和组织)。
我遇到的问题是语法,并确保1)列表元素是可比较的对象,而不仅仅是任何对象,以及2)诸如get(index)
getter方法应返回列表类型的对象而无需强制转换,即如果使用< Integer >
参数化创建的列表,则get()
的返回类型应为Integer,而不是Comparable或Object。
我知道可以使用< E >
和< T >
类的东西来创建Java中的参数化对象,但这不允许我要求列表中的元素是可比较的。
顺便说一句,如果您有任何评论,例如“仅使用ArrayList或LinkedList”。 或“您为什么要使用自定义列表,这很愚蠢?”, 请将其保留给自己 。 我想创建一个组织良好,高效的列表系统,该列表系统不适合任何现有结构。 要对列表进行自动排序,必须具有“可比性”要求。
如果有人可以告诉我如何执行此操作,将不胜感激。
可比较的对象:
<V extends Comparable<V>>
在定义类型参数时,可以使用extends
关键字来指定您的类只能接受具有特定超类型(在您的情况下为Comparable
)的类型参数。
至于get
方法-只需使用与返回类型相同的type参数即可。 例如:
public class MyList<T extends Comparable<T>> {
public T get(int index) {
...
}
}
您应使用上限Comparable
声明泛型类型参数,以确保各项都是Comparable
。 但是, Comparable
本身通常具有一个类型参数 。 例如, Integer
实现Comparable<Integer>
。
T extends Comparable<T>
是否起作用? 可以,但是如果Superclass implements Comparable<Superclass>
,则子Subclass
也实现Comparable<Superclass>
。 为了解决这种可能性,请引入一个下限为T
的通配符。
public class CustomParameterizedList<T extends Comparable<? super T>>
这遵循标准Java中的现有模式,例如Collections.sort
,它类似地定义了T
public static <T extends Comparable<? super T>> void sort(List<T> list)
Java泛型教程对为什么<T extends Comparable<? super T>>
解释 <T extends Comparable<? super T>>
<T extends Comparable<? super T>>
比<T extends Comparable<T>>
更灵活。
T不必与自己完全可比。 所需要做的就是让T与其超类型之一可比。 这给我们:
public static <T extends Comparable<? super T>> T max(Collection<T> coll)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.