有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

可扩展枚举Java

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


共 (4) 个答案

  1. # 1 楼答案

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

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

  2. # 2 楼答案

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

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

    有关Java中这种用法的示例,请参见: https://github.com/netty/netty/blob/master/example/src/main/java/io/netty/example/telnet/TelnetClientInitializer.java

  3. # 3 楼答案

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

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

  4. # 4 楼答案

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

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

    你最好的选择是:

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

    或者

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