java - Java中的泛型和排序

标签 java generics sorting type-safety

假设您在 Java 中编写了一个静态函数来对数组进行排序,很像 Arrays.sort()Arrays.sort() 的问题是它接收一个 Object 数组,如果它的元素没有实现 Comparable 则抛出 ClassCastException .

因此,您希望函数接收 Comparable 子类型的数组作为参数。类似的东西可以工作:

static <T extends Comparable> void sort(T[] array);

该签名的问题在于,您仍然可以传递具有整数和字符串的 Comparables 数组,这会导致 RuntimeException

那么,如何创建一个只接收其元素实现 Comparable 且具有所有相同类型(例如 Integer、String 等)的数组的函数?

最佳答案

使用

static <T extends Comparable<? super T>> sort(T[] array);

这是完成任务的最通用规范。基本上,它断言 T 是一种可以与自身进行比较的类型。

关于java - Java中的泛型和排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2071929/

相关文章:

java - 如何返回一个通用的 ArrayList<T>

sorting - MongoDB按子文档计数排序

mongodb聚合查询排序结果并显示日期名称

java - Mybatis 一对多集合映射总是有一个默认实体

java - 在父类(super class)和子类中实现同名但不同实现的方法

java - Java强加密-独立库-仅限源代码

android - 具有泛型和 Void/Nothing 返回类型的 Kotlin 结果类型

c - 对长结构数组进行排序

java - 我应该在我的应用程序上使用什么 OAuth 2 工作流程

Java 使用带有 switch 语句的枚举