为什么RandomAccessFile采用String而不是enum作为" mode"参数

时间:2015-12-06 11:12:21

标签: java enums

我在这里阅读了许多答案,确认了我(很明显)关于在处理小的,封闭的值集时使用枚举而不是String对象的意见。

但是最近我注意到Java API中的几个例子已经做出了相反的选择。我现在只记得这个了

public RandomAccessFile(File file, String mode)

其中mode参数只能是rrwrwsrwd。否则,将抛出IllegalArgumentException异常。

我能想到的唯一原因是这种方法可以在Java语言的枚举之前使用,我是对的吗?如果那是真的,那么今天是否存在选择String而不是枚举的情况对于闭合集合有什么意义呢?

2 个答案:

答案 0 :(得分:4)

JDK1.0中存在

RandomAccessFile,而JDK5.0中引入了枚举。

答案 1 :(得分:-1)

就像@mrwiggles所说,Java enum类型是作为Java 5发行版的一部分引入的。

如果您对为什么和/或 如何改进语言感到好奇,那么有很多博客和示例可以证明它们的好处:

一般情况下,如果你有一系列特定的预定义值,就像你在rrw等处注意到的那样,那么使用{{1}更合乎逻辑}。它们不那么模糊,可以像任何其他类(包含方法,实例变量,常量等)一样进行设计。如果经常检查它们,它们在某些情况下也会显示出enum以上的轻微性能改进。阅读Java: Performance of Enums vs. if-then-else,看看我在说什么。

Joshua Bloch在他的书 Effective Java 中讨论了Stringenum常量的好处。这不完全是我们在这里讨论的内容,但它非常接近(见More Effective Java with Google's Joshua Bloch):

  

对于枚举,声音咬合是“始终使用枚举代替int常量”(第30项)。枚举提供了许多优点:编译时类型安全性,在不破坏客户端的情况下添加或删除值的能力,有意义的打印值,将方法和字段与值相关联的能力等等。由于我们有EnumSet,因此该建议同样适用于位字段,这应该被认为是过时的。