繁体   English   中英

如何使用Comparables在Java中创建自定义参数化列表对象?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM