gpt4 book ai didi

Java单例-空静态变量(无法解释)

转载 作者:行者123 更新时间:2023-12-01 12:50:11 24 4
gpt4 key购买 nike

有人可以解释一下怎么可能吗,该方法 obtain(..) 会为输入 ConfiguratorType.SKODA 抛出 IllegalStateException(变量 configurators 包含 {SKODA=null}) ?怎么可能是null,我不明白为什么SkodaConfigurator.INSTANCE返回null。它永远不应该为空,还是我错了?代码在servlet环境,Java 7中执行。

谢谢

public class CarConfigurators {

private static Map<ConfiguratorType, CarConfigurator> configurators
= new EnumMap<ConfiguratorType, CarConfigurator>(ConfiguratorType.class);

static {
configurators.put(ConfiguratorType.SKODA, SkodaConfigurator.INSTANCE);
// ..
}

public static CarConfigurator obtain(ConfiguratorType type) {
CarConfigurator configurator = configurators.get(type);
if (configurator == null)
throw new IllegalStateException("Car configurator of type " + type + " is not registered.");
return configurator;
}
...
}


public class SkodaConfigurator extends CarConfigurator {

public static final SkodaConfigurator INSTANCE = new SkodaConfigurator();
...
}

public enum ConfiguratorType {
SKODA,
// ..
}

最佳答案

静态代码不能同时运行,静态初始化的各个部分必须按给定的顺序发生。显然,在这种情况下,执行configurations.put(...) 的静态 block 在SkodaConfiguration 中的静态变量初始化之前运行。

关于Java单例-空静态变量(无法解释),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24283173/

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