在构造函数中初始化Enum变量

阿基尔

我的枚举看起来像这样:

public enum SignMethod {    

    MICROSOFT("Microsoft"),XML("Xml"),HDR("Hdr"),JAVA1("Java1");

    private final String name;
    private ArrayList<Server> servers = new ArrayList<>();
    private HashSet<String> fileTypes = new HashSet<>();

    public static void main(String... args) {
        System.out.println(MICROSOFT.getName()+" "+MICROSOFT.getServers()+ " " + MICROSOFT.getFileTypes());
        System.out.println(ServerAndSignMethodInitialiser.getServers(SignMethod.MICROSOFT));
        System.out.println(SignDataInitialiser.getFileTypesList(SignMethod.MICROSOFT));
    }

    private SignMethod(String name) {
        this.name = name;
        this.servers = ServerAndSignMethodInitialiser.getServers(this);
        System.out.println(servers);
        this.fileTypes = SignDataInitialiser.getFileTypesList(this);
        System.out.println(fileTypes);
    }
}

我正在尝试通过静态初始化程序类初始化服务器变量,该类具有一个从SignMethod枚举映射到服务器ArrayList的映射。但是,当我在构造函数中初始化后立即打印服务器时,其打印为null。将构造函数中的“ this”传递给其他方法是否存在一些问题。

public static ArrayList<Server> getServers(SignMethod signMethod) {
    System.out.println(signMethod);
    return signmethodToServerMap.get(signMethod);        
}

当我在getServers方法中优先使用signMethod时,其打印方式为“ MICROSOFT”等。

fxnn

猜猜这是鸡蛋和鸡肉的问题。

  • 每个枚举值的构造函数都需要调用该getServers(SignMethod)方法。
  • getServers(SignMethod)方法在中查找Map
  • Map具有枚举值作为键。因此,它不能在枚举值的构造函数完成之前被填充。

目前,我可以想到三种解决方案:

  1. 保持枚举简单,不要尝试在其中存储其他信息。然后,您可以完全依靠signmethodToServerMap来存储服务器。
  2. 无需静态初始化地图,只需将Server列表存储在枚举中即可。
  3. 使Map独立于枚举。因此,例如,从映射StringServer并说

    this.servers = ServerAndSignMethodInitialiser.getServers(this.name);
    

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Java

在构造函数中初始化空实例变量

来自分类Java

变量未在默认构造函数中初始化

来自分类Dev

Java构造函数中类变量的初始化

来自分类Dev

cppcheck:构造函数中未初始化的成员变量

来自分类Dev

更改后在构造函数中初始化const变量

来自分类Java

在Java中的构造函数之前初始化最终变量

来自分类Dev

在构造函数或声明中初始化变量

来自分类Dev

在类的构造函数中初始化ifstream变量

来自分类Dev

在构造函数中初始化类成员变量

来自分类Dev

在没有构造函数的类中初始化变量

来自分类Dev

在类本身中初始化 TypeScript 变量与在构造函数中初始化的区别

来自分类Dev

构造函数不初始化变量

来自分类Dev

我如何在初始化列表中的构造函数之后初始化变量/对象?

来自分类Dev

在构造函数中初始化的变量未保持初始化状态(C ++)

来自分类Dev

是否可以在构造函数体内而不是初始化列表中初始化成员变量?

来自分类Java

我应该在构造函数内部还是外部构造函数中初始化变量

来自分类Java

在构造函数中初始化日历

来自分类Dev

在构造函数中初始化流

来自分类Dev

在从构造函数或init块调用的重写的抽象函数中初始化时,变量未正确初始化

来自分类Dev

如何访问初始化函数中不是成员变量的构造函数参数?

来自分类Dev

构造函数执行顺序/顺序:函数中静态变量(类实例)的依赖初始化

来自分类Dev

在Java构造函数中使用变量来初始化仍在构造函数中的其他变量

来自分类Dev

函数中的变量初始化

来自分类Dev

在函数中未初始化的变量

来自分类Java

在子类中初始化超类变量(构造函数中需要)

来自分类Dev

我可以检查构造函数主体中在初始化列表中设置的变量吗?

来自分类Dev

如何在辅助构造函数中初始化变量并在 kotlin 中调用 super?

来自分类Dev

要在构造函数上初始化的抽象变量

来自分类Dev

构造函数是否需要初始化静态变量?

Related 相关文章

  1. 1

    在构造函数中初始化空实例变量

  2. 2

    变量未在默认构造函数中初始化

  3. 3

    Java构造函数中类变量的初始化

  4. 4

    cppcheck:构造函数中未初始化的成员变量

  5. 5

    更改后在构造函数中初始化const变量

  6. 6

    在Java中的构造函数之前初始化最终变量

  7. 7

    在构造函数或声明中初始化变量

  8. 8

    在类的构造函数中初始化ifstream变量

  9. 9

    在构造函数中初始化类成员变量

  10. 10

    在没有构造函数的类中初始化变量

  11. 11

    在类本身中初始化 TypeScript 变量与在构造函数中初始化的区别

  12. 12

    构造函数不初始化变量

  13. 13

    我如何在初始化列表中的构造函数之后初始化变量/对象?

  14. 14

    在构造函数中初始化的变量未保持初始化状态(C ++)

  15. 15

    是否可以在构造函数体内而不是初始化列表中初始化成员变量?

  16. 16

    我应该在构造函数内部还是外部构造函数中初始化变量

  17. 17

    在构造函数中初始化日历

  18. 18

    在构造函数中初始化流

  19. 19

    在从构造函数或init块调用的重写的抽象函数中初始化时,变量未正确初始化

  20. 20

    如何访问初始化函数中不是成员变量的构造函数参数?

  21. 21

    构造函数执行顺序/顺序:函数中静态变量(类实例)的依赖初始化

  22. 22

    在Java构造函数中使用变量来初始化仍在构造函数中的其他变量

  23. 23

    函数中的变量初始化

  24. 24

    在函数中未初始化的变量

  25. 25

    在子类中初始化超类变量(构造函数中需要)

  26. 26

    我可以检查构造函数主体中在初始化列表中设置的变量吗?

  27. 27

    如何在辅助构造函数中初始化变量并在 kotlin 中调用 super?

  28. 28

    要在构造函数上初始化的抽象变量

  29. 29

    构造函数是否需要初始化静态变量?

热门标签

归档