定义为:
noneOf(Class<E> elementType)
Creates an empty enum set with the specified element type.
但是为什么它需要Class<E>
,而不是像noneOf(T elementType)
中那样的T呢?
既然它似乎需要,为什么不在类中使用anytype<&燃气轮机;
定义为:
noneOf(Class<E> elementType)
Creates an empty enum set with the specified element type.
但是为什么它需要Class<E>
,而不是像noneOf(T elementType)
中那样的T呢?
既然它似乎需要,为什么不在类中使用anytype<&燃气轮机;
我知道编译时的类型(权限),所以可能是
EnumSet.noneOf(Authority)
?
你不能做EnumSet.noneOf(Authority)
,因为那不是合法的Java.当你想传递一个类型时,你可以使用Class
实例,当你在编译时知道需要的类时,你可以使用类文字(例如Authority.class
).
但是为什么它需要
Class<E>
,而不是像noneOf(T elementType)
中那样的T呢?
从概念上讲,当您需要empty组所述类型时,需要instance个类型是没有意义的.但我想问题是,"为什么首先需要任何论证?".毕竟,你可以这样做:
Set<String> set = new HashSet<>();
没有通过Class
个实例.
原因是EnumSet
是高度专业化的Set
实现.它需要知道所有现有的enum
个常数,即使集合为空,也可以使用Class
查询这些常数.此外,该实现仅适用于single type.EnumSet
不能包含来自不同enum
类型的常数.Class
允许实现强制执行这一点.
其他方法,例如EnumSet#of(E)
,不需要Class
,因为它们需要enum
的实例(即一个或多个常量),并且可以从中获取类型.
既然它似乎需要,为什么不在类中使用anytype<&燃气轮机;
因为Class<?>
分可以通过any type分,而不仅仅是enum
分.当然,这可以通过限定通配符Class<? extends Enum<?>>
来解决.现在只允许使用enum
种类型,但静态类型系统不知道您正在使用的which enum
种类型.这意味着像noneOf
这样的方法只能返回EnumSet<?>
,这不是很有用.
通过声明一个类型变量E
并将其限定为扩展Enum<E>
,Class<E>
的使用迫使您传递enum
类型and,然后返回EnumSet<E>
.