【问题标题】:What is that <E> in the method signature?方法签名中的 <E> 是什么?
【发布时间】:2014-04-21 10:48:38
【问题描述】:

我正在阅读来自here 的 Set 接口,下面的代码是一个从集合中删除重复项的通用方法。

我的问题是 **&lt; E&gt;** 放在静态之后 Set&lt;E&gt; 之前是什么?

我的意思是Set&lt;E&gt; 还不够吗?为什么&lt;E&gt; 出现了两次?

public static <E> Set<E> removeDups(Collection<E> c) {
    return new LinkedHashSet<E>(c);
}

【问题讨论】:

标签: java generics collections set linkedhashset


【解决方案1】:

这里的**&lt;E&gt;** 是一个泛型类型。泛型类型定义为

泛型类型是参数化的泛型类或接口 超过类型。下面的Box类将被修改来演示 这个概念。 LINK

关于您与&lt;E&gt; 相关的问题。可以在同一个教程中找到一个很好的描述

类型参数命名约定

按照惯例,类型参数名称是单个大写字母。 这与变量命名约定形成鲜明对比 你已经知道并且有充分的理由:没有这个约定, 很难区分类型变量 以及一个普通的类或接口名称。

最常用的类型参数名称有:

 E - Element (used extensively by the Java Collections Framework)
    K - Key
    N - Number
    T - Type
    V - Value
    S,U,V etc. - 2nd, 3rd, 4th types

您将看到这些名称在整个 Java SE API 和其他 本课。

【讨论】:

    【解决方案2】:

    这意味着这个方法声明了一个类没有定义的泛型参数类型;在这种情况下,您必须在返回类型之前声明参数类型(即使这个“返回类型”是void)。


    这样想。删除初始的&lt;E&gt;。您的声明将变为:

    public static Set<E> removeDups(Collection<E> c)
    

    这里的E 是什么?除非是类本身定义的泛型参数类型,否则只能是现有类。

    因此使用了这种语法。它允许您定义用于方法签名的通用参数。

    【讨论】:

      【解决方案3】:

      它只是方法中使用的泛型类型。使用泛型类型的静态方法必须在返回类型之前指定该类型。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-11-06
        • 2021-11-28
        • 2011-01-22
        • 2020-08-26
        • 1970-01-01
        • 2011-09-14
        • 1970-01-01
        相关资源
        最近更新 更多