我一直在阅读
System
库 set
和 get
方法的详细信息,但参数通常是字符串。
自从包含
String
以来,您是否认为使用 enum
作为参数是不好的做法?
至少更好的选择可能是
public final String
,不?
我认为枚举是比字符串更好的方法。它们是类型安全的,并且比较它们比比较字符串更快。
作为 Java 1.5 之前的替代方案,您可以使用 Joshua Bloch 在他的《Effective Java》一书中建议的类型安全枚举模式。对于类型安全枚举,另请参阅 http://www.javacamp.org/designPattern/enum.html
如果您的参数集有限且在编译时已知,请使用
enum
。
如果您的参数集在编译时是开放且未知的,请使用字符串。
仅仅因为您将
public final String
声明为您希望作为参数传递到方法中的东西,就没有什么可以阻止我传递我喜欢的任何内容。
使用
enum
s 意味着我无法创建自己的对象来传递,从而保护问题的双方。我认为您应该使用常量字符串代替枚举的唯一一次是,如果您需要为用户留出空间来扩展您的方法以启用自定义功能......
如果您指的是 System.setProperty()、System.getProperty() 或 System.getenv(),我认为字符串在这里是合适的,因为可能的键集是开放的。 key 参数对应于某个文件或存储在某处的实际文本/字符串类型值。
如果你有一组封闭的键,我认为枚举会更受欢迎。
虽然使用枚举是类型安全的,但将枚举转换为字符串的需要非常频繁,反之亦然。 Java 中没有内置功能可以做到这一点。最终您将使用 valueOf() 和 toString()。使用这种方法与仅使用字符串没有太大区别。因为您需要处理字符串无法转换为 Enum 的情况。
因此,仅使用静态最终字符串很容易,并且是一种常见的做法,AFAIK。
例如,您需要使用某些 API 与服务器进行交互。您需要将每个方法和响应定义为枚举。然后您需要添加 toString 和 valueOf 方法。为什么不使用字符串?
我学会了“最不意外的方法”。直觉上,使用枚举是正确的。所以我会去做。我确信 Java 开发者也有同样的想法。
编辑:POLS的精彩解释:http://benpryor.com/blog/2006/06/29/api-design-the-principle-of-least-surprise/
在现有 API 中使用字符串并不是一个坏习惯;仅仅因为 Java 现在支持枚举就更改 API 是不好的做法。对于新的 API,我同意其他人的说法。