我正在制作一个程序,它有一个枚举,我们用于类型列表,但我希望它有可能在运行时稍后扩展,我不知道最好的方法是什么。我能够想到的唯一方法是使用类的数组来代替我不想做的枚举,因为我会忽略枚举的简单性。
答案 0 :(得分:3)
枚举应该是完全静态的枚举,因此您必须能够知道枚举在编译时所涵盖的确切值。
您可以在编译时生成java文件,从而允许对值进行更多的灵活性,尽管这可能会超出顶部。
你最好的选择是:
1)使用一个类,可能使用一组预定义的实例,以便可以在运行时创建所述类的新实例。
或
2)创建一个包含默认值的枚举实现的接口,允许在运行时创建新实例,同时保留某种形式的枚举结构。
答案 1 :(得分:1)
无法在运行时扩展/扩展Java枚举。它们更像是常量。如果您需要可扩展的枚举,可能enum
对您来说不是正确的概念!
考虑使用在运行时实例化的简单类。
答案 2 :(得分:0)
如果你不能在编译时知道所有需要的值,我只会使用字符串。如果要将属性或行为与其关联,可以使用地图。这在Java中很常见。同样在python中,人们使用字符串作为枚举。
Java 7使switch语句对字符串起作用,IMO支持这种字符串的使用。
有关Java中此类用法的示例,请参阅: https://github.com/netty/netty/blob/master/example/src/main/java/io/netty/example/telnet/TelnetClientInitializer.java
答案 3 :(得分:0)
枚举在编译时修复。你究竟如何“使用简单性”?例如,您不能使用事先不知道的常量来编写switch
命令。
如果要根据某事物的类型进行分支,可以使用经典的OO分解(在列表中的每个类型中创建方法,让多态选择正确的分支)或使用从类对象到功能对象的HashMap或战略实施。