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