Java:`enum` vs`String`作为参数

时间:2008-11-10 08:37:02

标签: java enums string const

我一直在阅读Systemsetget方法的详细信息,但参数通常是字符串。

您是否考虑使用String作为参数不良做法,因为包含enum

最好的替代方案可能是public final String,否?

7 个答案:

答案 0 :(得分:21)

我认为Enums比Strings更好。它们是类型安全的,比较它们比比较字符串更快。

作为Java 1.5之前的替代方案,您可以使用Joshua Bloch在他的“Effective Java”一书中提出的类型安全枚举模式。对于类型安全的枚举,另请参阅http://www.javacamp.org/designPattern/enum.html

答案 1 :(得分:14)

如果您的参数集有限且在编译时已知,请使用enum

如果您的参数集在编译时是打开的和未知的,请使用字符串。

答案 2 :(得分:5)

仅仅因为你声称public final String是你希望作为参数传递给方法的东西,没有什么能阻止我传递任何我喜欢的东西。

使用enum s意味着我无法创建自己的对象来传入,从而保护问题的两个方面。唯一一次我认为你应该使用常量字符串来代替枚举,如果你需要为用户留出空间来扩展你的方法以启用自定义功能......

答案 3 :(得分:4)

如果您指的是System.setProperty(),System.getProperty()或System.getenv(),我认为字符串在这里是合适的,因为可能的键集是打开的。 key参数对应于某个文件或某个地方的实际文本/字符串类型值。

如果您有一组封闭的密钥,我认为枚举会更受欢迎。

答案 4 :(得分:3)

我学会了“最少惊喜的方法”。本能地,使用枚举是正确的。所以我会去做。我确信Java制造商都这么认为。

修改:对POLS的出色解释:http://benpryor.com/blog/2006/06/29/api-design-the-principle-of-least-surprise/

答案 5 :(得分:2)

虽然使用枚举是类型安全的,但是将枚举转换为字符串的需求是相当频繁的。并且在Java中没有内置功能。而且你最终会使用valueOf()和toString()。使用这种方法与使用字符串没有太大区别。因为您需要处理无法将字符串转换为Enum的情况。

所以只使用静态最终字符串很容易,这是一种常见的做法,AFAIK。

例如,您需要使用某些API与服务器进行交互。您需要将每个方法和响应定义为Enum。然后你需要添加toString和valueOf方法。为什么不使用String?

答案 6 :(得分:0)

在现有API中使用字符串并不是一种不好的做法;改变API是不好的做法,因为Java现在支持枚举。对于新API,我同意其他人所说的话。