我的枚举看起来像这样:
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”等。
猜猜这是鸡蛋和鸡肉的问题。
getServers(SignMethod)
方法。getServers(SignMethod)
方法在中查找Map
。Map
具有枚举值作为键。因此,它不能在枚举值的构造函数完成之前被填充。目前,我可以想到三种解决方案:
signmethodToServerMap
来存储服务器。Server
列表存储在枚举中即可。使Map
独立于枚举。因此,例如,从映射String
到Server
并说
this.servers = ServerAndSignMethodInitialiser.getServers(this.name);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句