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

问题描述 投票:0回答:7

我一直在阅读

System
set
get
方法的详细信息,但参数通常是字符串。

自从包含

String
以来,您是否认为使用
enum
作为参数是不好的做法?

至少更好的选择可能是

public final String
,不?

java enums string constants
7个回答
25
投票

我认为枚举是比字符串更好的方法。它们是类型安全的,并且比较它们比比较字符串更快。

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


19
投票

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

enum

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


7
投票

仅仅因为您将

public final String
声明为您希望作为参数传递到方法中的东西,就没有什么可以阻止我传递我喜欢的任何内容。

使用

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


4
投票

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

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


4
投票

虽然使用枚举是类型安全的,但将枚举转换为字符串的需要非常频繁,反之亦然。 Java 中没有内置功能可以做到这一点。最终您将使用 valueOf() 和 toString()。使用这种方法与仅使用字符串没有太大区别。因为您需要处理字符串无法转换为 Enum 的情况。

因此,仅使用静态最终字符串很容易,并且是一种常见的做法,AFAIK。

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


4
投票

我学会了“最不意外的方法”。直觉上,使用枚举是正确的。所以我会去做。我确信 Java 开发者也有同样的想法。

编辑:POLS的精彩解释:http://benpryor.com/blog/2006/06/29/api-design-the-principle-of-least-surprise/


0
投票

在现有 API 中使用字符串并不是一个坏习惯;仅仅因为 Java 现在支持枚举就更改 API 是不好的做法。对于新的 API,我同意其他人的说法。

© www.soinside.com 2019 - 2024. All rights reserved.