EnumSet
具有值类的私有字段。为什么不提供公共访问?
此外,EnumMap
具有键和值类的私有字段。同样的问题。
对于非空集/映射,可以迭代第一个元素并从非空值中提取类。但是,对于空集/映射,这是不可能的。
EnumSet
具有值类的私有字段。为什么不提供公共访问?
此外,EnumMap
具有键和值类的私有字段。同样的问题。
对于非空集/映射,可以迭代第一个元素并从非空值中提取类。但是,对于空集/映射,这是不可能的。
EnumSet
an的成员类和关键类没有getter方法的原因是EnumMap
为了有效地使用这些类,静态类型通常是程序员已知和使用的,并且类型Class
可以很容易地派生自使用类文字的类型名称。
例如,考虑以下枚举:
enum Direction { NORTH, EAST, SOUTH, WEST }
你会这样使用它:
Set<Direction> wittsEnd = EnumSet.of(NORTH, EAST, SOUTH); // hint: don't go west
要添加、删除或检查此集合中的成员资格,我们通常有一个Direction
实例。如果我们想创建一个新集合或从现有集合派生一个,我们将声明一个类型为 的变量Set<Direction>
。如果我们想要Class
枚举类型对应的对象,我们只需使用Direction.class
. 因此,通常不需要将Class
对象从EnumSet
自身中取出。
类似的推理适用于EnumMap
。
我想可能存在一些情况,其中一个人有一个 an 的实例,EnumSet<?>
并且您想要创建一组所有或没有枚举值,这需要Class
编译时未知类型的对象。这样的情况似乎很做作。但是,对于这种情况,可以使用这种同样人为的技术(即 hack)来获取某些未知 EnumSet 的枚举类s
:
Class<? extends Enum<?>> enumClass =
EnumSet.copyOf(s).addAll(EnumSet.complementOf(s)).iterator().next().getClass();
类似的技术可能用于获取EnumMap
.
EnumSet 有一个值类的私有字段。为什么不提供公共访问?
我想不出技术上的理由不这样做。但是,我也想不出一个需要它的引人注目的用例。
但最终,您的问题的答案是,这是由 Java 设计人员做出的决定,只有他们才能解释这些决定的实际推理。