Tag: enumset

Java:如何编写接受实现给定接口的Enum常量的generics函数?

所以我有一堆枚举,它们都扩展了一个接口: public interface MyInterface {} 然后我有几个扩展界面的枚举: public enum A implements MyInterface {} public enum B implements MyInterface {} 我想要一个只接受扩展此接口的枚举的函数。 我不能做: public void MyFunction(MyInterface input) 因为,在函数内部,我使用EnumSet.of(输入)创建一个EnumSet。 我做了 public <T extends Enum> void myFunction(T input) 因为,在函数内部,我需要创建一个需要传递给另一个函数的Map。 那么有没有任何类型安全的方法来做这个没有铸造? 编辑:更正的接口定义。

为什么EnumSet或EnumMap可能比它们的哈希值更高效?

以下内容来自EnumMap的Java doc的Implementation Note部分: 实施说明:所有基本操作都在恒定时间内执行。 它们很可能(虽然不能保证)比它们的HashMap对应物更快。 我在EnumSet的java doc中也看到过类似的行。 我想知道为什么EnumSets和EnumMaps更有可能比他们的哈希同行更快?

在现代Java 8 API中使用位域而不是EnumSet的理由

EnumSet ,与enum本身一样古老(自Java 5开始),应该是位域用例的非妥协替代品:与位域一样快速和精简(好吧,除了不是原始类型),以及类型安全开机 另一方面,最新和多年来最受期待的Java API-Streams API – Spliterator地为Spliterator的特性使用了位域。 我是否应该认为上述内容是核心Java专家明确承认EnumSet毕竟不是那么好? 我是否应该重新考虑从不使用位域的常见最佳实践建议?