【问题标题】:Freestanding type parameter in Java GenericsJava泛型中的独立类型参数
【发布时间】:2020-02-09 06:45:11
【问题描述】:

Java 泛型类型的类型参数部分遵循泛型类名。例如:

class name<T1, T2, ..., Tn> { /* ... */ }

一旦掌握了它就会非常直观。但是,在Comparator&lt;T&gt; 的默认接口方法中看到一些独立的类型参数部分,我完全被难住了。例如:

default <U> Comparator<T> thenComparing(
        Function<? super T, ? extends U> keyExtractor,
        Comparator<? super U> keyComparator)

显然该方法返回了某种比较器对象,但是您如何用英文解释独立的&lt;U&gt;

【问题讨论】:

  • U 是一个方法泛型类型参数。在 Java 中,不仅类可能有泛型类型参数,方法也可能有它们
  • 问题不在于方法是否可以具有泛型类型参数(当然可以!),问题在于独立类型参数。
  • 独立类型参数就是方法类型参数。这是 Java 中向方法声明泛型类型参数的语法。您需要在某处声明它们,以便方法参数可以具有与类的泛型类型不同的泛型类型。

标签: java generics types java-8


【解决方案1】:

它介绍了类型参数本身。如果您要在没有它的情况下编写方法签名:

Comparator<T> thenComparing(
        Function<? super T, ? extends U> keyExtractor,
        Comparator<? super U> keyComparator)

这意味着,应该存在一些名为 U 的具体类型对方法可见。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-06
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多