可扩展枚举Java

可扩展枚举Java,java,enums,expandable,Java,Enums,Expandable,我正在制作一个程序,它有一个枚举,我们用它来列出类型,但我希望它有可能在以后的运行时被扩展,我不确定最好的方法是什么。我能想到的唯一方法是使用类数组代替枚举,我不想这样做,因为我会失去枚举的简单性。Java枚举无法在运行时扩展/扩展。它们更像是常数。如果您需要可扩展的枚举,可能enum不适合您 考虑使用运行时实例化的简单类。Java枚举无法在运行时扩展。它们更像是常数。如果您需要可扩展的枚举,可能enum不适合您 考虑使用一个在运行时实例化的简单类。如果您不能知道编译时需要存在的所有值,我只使用

我正在制作一个程序,它有一个枚举,我们用它来列出类型,但我希望它有可能在以后的运行时被扩展,我不确定最好的方法是什么。我能想到的唯一方法是使用类数组代替枚举,我不想这样做,因为我会失去枚举的简单性。

Java枚举无法在运行时扩展/扩展。它们更像是常数。如果您需要可扩展的枚举,可能
enum
不适合您


考虑使用运行时实例化的简单类。

Java枚举无法在运行时扩展。它们更像是常数。如果您需要可扩展的枚举,可能
enum
不适合您


考虑使用一个在运行时实例化的简单类。

如果您不能知道编译时需要存在的所有值,我只使用字符串。如果要将属性或行为与之关联,可以使用贴图。这在Java中相当常见。同样在python中,人们使用字符串作为枚举

Java7使switch语句在字符串上工作,这是IMO支持字符串使用的一个举措

有关Java中此类使用的示例,请参见:

如果您不能知道编译时需要存在的所有值,我就使用字符串。如果要将属性或行为与之关联,可以使用贴图。这在Java中相当常见。同样在python中,人们使用字符串作为枚举

Java7使switch语句在字符串上工作,这是IMO支持字符串使用的一个举措

有关Java中此类使用的示例,请参见:

枚举应该是完全静态的枚举,因此您必须能够知道枚举在编译时覆盖的确切值

您可以在编译时生成java文件,从而使这些值具有更大的灵活性,尽管这可能有点过头了

你最好的选择是:

1) 使用一个类,可能与一组预定义实例一起使用,以便在运行时创建所述类的新实例


2) 创建包含默认值的枚举所实现的接口,允许在运行时创建新实例,同时保留某种形式的枚举结构。

枚举应该是完全静态的枚举,因此您必须能够知道枚举在编译时覆盖的确切值

您可以在编译时生成java文件,从而使这些值具有更大的灵活性,尽管这可能有点过头了

你最好的选择是:

1) 使用一个类,可能与一组预定义实例一起使用,以便在运行时创建所述类的新实例


2) 创建包含默认值的枚举实现的接口,允许在运行时创建新实例,同时保留某种形式的枚举结构。

枚举在编译时固定。你到底会如何“使用简单性”?例如,您不能使用事先未知的常量编写
开关
命令


如果重点是基于某事物的类型进行分支,则可以使用经典的OO分解(在列表中的每个类型中创建方法,并让多态性选择正确的分支),或者使用从类对象到函数对象或策略实现的HashMap。

枚举在编译时固定。你到底会如何“使用简单性”?例如,您不能使用事先未知的常量编写
开关
命令


如果重点是基于某事物的类型进行分支,则可以使用经典的OO分解(在列表中的每个类型中创建方法,并让多态性选择正确的分支),或者使用从类对象到函数对象或策略实现的HashMap

“枚举类型是一种特殊的数据类型,它允许变量成为一组预定义的常量。”在这里,它听起来不再像枚举:)枚举用于枚举编译时固定且已知的常量。如果您在编译时拥有未知的数据(也就是说,你不知道它的全部或期望它经常改变)那么,枚举可能不是表示它的最佳方式。这几乎不是
枚举
的用例。请将
集合
与您自己的某个类结合使用。是否可以使枚举实现接口,以及如何使用多个枚举实现接口?是的,但问题不同。”枚举类型是一种特殊的数据类型,它使变量成为一组预定义的常量。“在这里,它听起来不再像枚举:)枚举用于枚举编译时固定且已知的常量。如果您在编译时拥有未知的数据(也就是说,你不知道它的全部或期望它经常改变)那么,枚举可能不是表示它的最佳方式。这几乎不是
枚举
的用例。请将
集合
与您自己的某个类结合使用。是否可以使枚举实现接口,以及如何使用多个枚举实现接口?是的,但问题不同。使用字符串时,您会丢失一些接口Java枚举的强大功能-您不能为字符串定义额外的方法
int
String
枚举模式应被视为Java中的反模式。Java
enum
语言功能提供了类型安全和实例控制的保证(以及对象可扩展性的大部分重要功能)int/String枚举模式缺少。此外,在值上使用常量特定枚举方法代替
switch
语句的代码不那么脆弱,更易于维护。@scottb:我同意,除非需要支持的值为n