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