0

我从这里阅读了关于 Set 接口的内容,下面的代码是一个从集合中删除重复项的通用方法。

我的问题是**< E>**在 static before 之后放置的是什么Set<E>

我的意思是这还 Set<E>不够吗?为什么<E>有两次?

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

3 回答 3

1

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


这样想吧。删除初始<E>. 您的声明将变为:

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

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

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

于 2014-03-16T07:06:49.950 回答
1

**<E>**是一个泛型类型。泛型类型定义为

泛型类型是通过类型参数化的泛型类或接口。下面的 Box 类将被修改以演示该概念。关联

关于您与<E>. 可以在同一个教程中找到一个很好的描述

类型参数命名约定

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

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

 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 和本课的其余部分中看到这些名称。

于 2014-03-16T07:09:23.477 回答
0

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

于 2014-03-16T07:06:14.527 回答