Java 使用枚举是否会降低应用程序的可移植性?

Java 使用枚举是否会降低应用程序的可移植性?,java,enums,Java,Enums,我知道这个问题听起来很奇怪,但我的经理就是这么告诉我的。当我提出一种新的设计,使用enum,他说,“不,…”,然后马上评论说,使用这样的结构实际上会使应用程序“不太可移植” 这是真的吗?我想不是。你应该向他询问我的详细情况。。。这确实意味着您将无法在Java1.4或更早版本中编译代码,但这不是一个非常好的理由 听起来你的经理可能很困惑。。。但您应该始终按以获取详细信息。应用程序是否与其他编程语言交互,即通过API?这是我能想象的唯一一种枚举会导致问题的感觉。否则,在大多数语言中,它只是一个整数/

我知道这个问题听起来很奇怪,但我的经理就是这么告诉我的。当我提出一种新的设计,使用
enum
,他说,“不,…”,然后马上评论说,使用这样的结构实际上会使应用程序“不太可移植”


这是真的吗?我想不是。

你应该向他询问我的详细情况。。。这确实意味着您将无法在Java1.4或更早版本中编译代码,但这不是一个非常好的理由


听起来你的经理可能很困惑。。。但您应该始终按以获取详细信息。

应用程序是否与其他编程语言交互,即通过API?这是我能想象的唯一一种枚举会导致问题的感觉。否则,在大多数语言中,它只是一个整数/长,提供了一个额外的编译时安全检查层,只能使您的程序更加健壮。

除非您的经理希望保持JDK 1.4及以下版本的可移植性,否则他是错的。enum是Java语言的一部分,没有什么不可移植的。他能详细阐述他的观点吗?

Enum让人想到两个问题

首先是版本可移植性Enum自5.0版(又称1.5版)起就一直使用java。因此,如果他对维护与旧系统的向后兼容性感兴趣,这可能是一个值得关注的问题(http://en.wikipedia.org/wiki/Java_version_history#J2SE_1.4_.28February_6.2C_2002.29)


有时会出现的另一个问题是如何序列化/存储枚举。枚举通常作为一些索引存储在内存中,这些索引由编译器翻译,与实际字符串几乎没有关系。这对程序性能非常好,如果您不需要保存/存储/共享您的枚举,通常也可以。但是,当您尝试将其序列化/存储到数据库以供其他人阅读时,它可能会带来很多麻烦。

可移植性意味着您无法轻松将其转换为另一种编程语言,或可移植性意味着您无法在另一个java版本上运行它?我见过这样的情况,即使用
enum
的方式会降低应用程序的可扩展性,但“不要认为这会降低你的应用程序的可移植性。”马特·鲍尔,我怀疑他指的是Java语言:源代码的可移植性……不过他并没有详细说明。他后来确实说他“不熟悉Enum,理解它们有困难”,但这让我很困惑。@little bunny-你面临的问题比Enum更大。这就是说,在这种情况下,一种可能有帮助的方法是让您的经理熟悉enum——例如,在一个棕色的袋子里,向您的团队介绍“最近”的语言特性。强调以语言支持的方式来表示枚举的额外成本/风险(例如,考虑类型检查)。如果可能的话,请提及本可以完全避免的特定错误。@Andy,我完全同意。我想我开始变灰了/事实上,Java中的枚举是“单例”对象(每个值一个),它只包装一个整数值(或一些其他值,取决于您的构造函数),这样它们甚至在转换到对象时保持类型安全(并具有正确的toString)。Java enum有一个
toString()
enum.valueOf()
的相反方向,所以印刷应该不是问题。您还可以通过定义构造函数在每个枚举值中包装一个自定义值(如char或String),然后使用此值进行序列化。提示:在与经理交谈之前,请尝试在Java 1.4下编译应用程序。如果失败,那么您的应用程序已经与Java1.4不兼容。