java静态值未被赋值并返回空值
我有点像
public class Toys {
public static Toy BAT = Registry.getToy("BAT");
public static Toy DOLL = Registry.getToy("DOLL");
}
其中Registry记录了Toy类型的所有对象。当提供密钥时,它将返回有效的玩具实例
当我这样做的时候,玩具。蝙蝠,它给我空值,但注册表。getToy(“BAT”)返回我的有效玩具实例
公共类注册{
private static final HashMap<String, Toy> _toysMap = new HashMap<String, Toy>();
public static void putToy( String toyCode, Toy toy) {
_toysMap.put( toyCode, Toy ) ;
}
public static Toy getToy(String toyCode ) {
return _toysMap.get( toyCode);
}
}
我有什么明显遗漏的吗
另外,我正在给注册中心打电话。getToy(“蝙蝠”)和玩具。getToy(“蝙蝠”)同时
下面是失败的TestRegistry
导入静态组织。朱尼特。断言。*
导入组织。朱尼特。之前 导入组织。朱尼特。测试
公共类TestRegistry{
@Before
public void setUp() throws Exception {
System.out.println(Toys.BAT);
Registry.putToy("BAT", new Toy());
Registry.putToy("DOLL", new Toy());
}
@Test
public void test() {
System.out.println(Registry.getToy("BAT"));
System.out.println(Toys.BAT);
assertTrue(Registry.getToy("BAT") == Toys.BAT);
}
}
上面的照片
null-注册表不包含玩具
Toy@80cac9-注册处现在有玩具了
空-玩具。BAT仍然有空值
# 1 楼答案
你查过蝙蝠和蝙蝠的案子了吗
# 2 楼答案
在加载玩具类之前,需要初始化注册表中的值。我同意评论人士的看法,他们说这不是初始化这些文件的好方法
# 3 楼答案
当然,研究
Registry
的代码对于了解问题所在是必要的但一般来说,这样初始化静态变量是不安全的。也许在
Toys
类加载时,Registry
仍然没有正确加载所有玩具条目