2

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

4

4 回答 4

3

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

您可以在编译时生成 java 文件,从而在值上提供更多的灵活性,尽管这会有点过头了。

你最好的选择是:

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

或者

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

于 2013-09-28T12:25:05.697 回答
1

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

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

于 2013-09-28T12:23:41.893 回答
0

枚举在编译时是固定的。您将如何“使用简单性”?例如,您不能switch使用事先不知道的常量编写命令。

如果要根据某物的类型进行分支,您可以使用经典的 OO 分解(在列表中的每个类型中创建方法并让多态性选择正确的分支)或使用从类对象到功能对象或策略实现的 HashMap。

于 2013-09-28T12:27:01.873 回答
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

于 2013-09-28T12:25:04.570 回答