java - 如何引用 Java 中使用通配符标识的类的类?

标签 java class generics wildcard

例如,假设我想编写一个方法来切换列表的前两个元素,但前提是第二个元素大于第一个元素。我最初尝试做类似的事情:

static void swapFirstTwo(List<? extends Comparable> list) {
    if(list.get(0).compareTo(list.get(1)) > 0) {
        ? temp = list.get(0);
        list.set(0, list.get(1));
        list.set(1, temp);
    }
}

显然这是行不通的,但是我该怎么做呢?我可以将 ? 替换为 Object,但这不太好,因为之后我必须进行类型检查以确保一切都是安全的。

最佳答案

您可以预先给出类型,然后使用它:

static <T extends Comparable> void swapFirstTwo(List<T> list) {
// ----^^^^^^^^^^^^^^^^^^^^^^------------------------^
    if(list.get(0).compareTo(list.get(1)) > 0) {
        T temp = list.get(0);
// -----^
        list.set(0, list.get(1));
        list.set(1, temp);
    }
}

更多内容请参见 bounded section泛型教程的一部分。

user7 points out ,我们也想将界限放在 Comparable 上:

static <T extends Comparable<T>> void swapFirstTwo(List<T> list) {
// -------------------------^^^

关于java - 如何引用 Java 中使用通配符标识的类的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49136258/

相关文章:

java - 如何迭代不同对象的列表?

C++/Qt : passing variables to be changed in the class

Java ArrayList 泛型实现

c# - enum[] 是 IEnumerable<int> 在泛型方法中返回 true

Java lambda filter 和 map,我可以避免这些重复调用吗?

java - 使用多个 Java 类的 React-Native

java - 另一条 route 的 Apache Camel 蓝图 Web 服务响应

c++ - 代码在设置类变量时崩溃

java - 使用类重新排列代码?

C11 : Using `_Generic()` (or something) for types themselves (not instances of types)?