当前位置: 首页 > 面试题库 >

在现代Java 8 API中使用位域代替EnumSet的理由

弘思聪
2023-03-14
问题内容

EnumSetenum它本身就古老(自Java
5起),被认为是对位域用例的不妥协的替代:与位域一样快和精简(很好,除了不是原始类型),并且类型安全启动。在另一方面,最近,多年来最值得期待的Java
API,该API流,底气十足地采用对位域Spliterator的特性。

我是否应该将上述内容视为Java核心专家的明确认可,EnumSet毕竟那还不是那么好?我是否应该重新考虑不使用位域的常见最佳实践建议?


问题答案:

惊讶地发现它正在使用位域而不是EnumSet。虽然合理,但在此邮件列表线程中进行了讨论。似乎原因是能够设置和取消设置各种特征而不会影响呼叫者端的特征。使用EnumSet,要实现这一点,EnumSet每次需要在不同阶段进行更改时,都需要创建一个新对象。我想这就是位域赢得比赛的原因。

该线程的结论句基本上在这里预料到您的问题:

Java 8
API中此类标志的存在将(并且应该)引起很多人的注意,因为它违背了人们十年来一直被告知的内容。如果按原样采用,那么对于文档阅读者来说,最好是对为什么拒绝替代品有一个很好的解释。“我们对int标志感到满意,并且没有其他任何可以更好地表明自身的东西了”。“我们知道int标志对于API而言不是很好,但是我们非常努力地寻找了更好的替代方法,但没有成功”(如果是真的)。



 类似资料:
  • 问题内容: 很多年前我使用过XStream,但是我发现自2008年以来就没有更新这些库(最新消息)。现在是否有一个更现代且最新的Java XML序列化库? 问题答案: 按照偏好,相关性和活动的顺序: 访问JAXB项目的站点,以查看教程和指南。还可以查看原始的JAXB体系结构白皮书。 上面列出的JAXB项目是API的参考实现,并由GlassFish Application Server打包在其中。

  • 众所周知,是无法修复的(有关更多信息,请参见本问题中的讨论)。 关于替代方案和“我如何做得对”的最后一个问题已经有几年的历史了: null 类将实现的某种接口:. 深度复制。如果的istance引用的实例,则应引用新的. 复制到指定的目标:. 多态复制:如果扩展,则应将的所有属性从复制到。 当然,我可以自己实现所有这些,但是有标准接口不是很合理吗?还是我漏掉了什么? 我的上下文的一点背景。我经常使

  • 问题内容: 我需要将Windows C ++项目转移到linux,但是我目前正在使用与linux或标准不兼容的MS 。您建议使用什么头替换它以便在Linux中使用?我希望答案也是跨平台的。 问题答案: 有一个基于NCurses的Linux替代版本的Conio.h。 http://sourceforge.net/projects/linux- conioh/

  • 问题内容: 这是一个从来没有一个正确答案的问题,我已经在网上搜索了很多次,却找不到解决方案。 它适用于Firefox,Chrome。我的responseText将像Réunion这样返回char,它将显示为奇怪的符号。 我尝试了许多方法,例如编码和解码,在响应文件中设置标头都无效。我没主意了。请帮助某人。 在主文件中,确保设置了内容类型和字符集。 在您的AJAX加载页面中,确保您位于顶部。 问题解

  • 问题内容: 我知道的指示: JPA持久性机制读取“ persistence.xml”文件,查找名为“ persistence-unit- name”的持久性单元,并基于该持久性单元构造EntityManagerFactory。 我的问题是,如何强制JPA 使用不同于“ persistence.xml”的文件 ?例如“ persistence-test.xml”。 问题答案: 尽管单个JPA提供程序

  • 我想使用Mojarra和Weld在Apache TomEE上运行一个WebApp。 是否因为TomEE已经使用了另一个CDI-Framework(OpenWebB)而出现了问题?有可能让TomEE和Weld一起运行吗?