gpt4 book ai didi

java - 在构造函数中初始化枚举变量

转载 作者:太空宇宙 更新时间:2023-11-04 06:33:37 25 4
gpt4 key购买 nike

我的枚举如下所示:

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 的 Map。但是当我在构造函数中初始化后立即打印服务器时,它的打印为空。将构造函数中的“this”传递给其他方法是否存在问题。

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

当我在 getServers 方法中打印 signMethod 时,它可以打印为“MICROSOFT”等。

最佳答案

猜测这是某种先有蛋还是先有鸡的问题。

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

目前,我可以想到三个选项来解决该问题:

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

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

关于java - 在构造函数中初始化枚举变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25738792/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com