gpt4 book ai didi

java - 静态值未分配并返回空值

转载 作者:行者123 更新时间:2023-12-02 00:24:43 25 4
gpt4 key购买 nike

我有类似的东西

public class Toys {

public static Toy BAT = Registry.getToy("BAT");
public static Toy DOLL = Registry.getToy("DOLL");

}

其中注册表跟踪玩具类型的所有对象。当提供 key 时,它将返回有效的玩具实例。

当我这样做时,Toys.BAT,它给我空值,但Registry.getToy("BAT")返回我有效的玩具实例。

公共(public)类注册表{

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);
}

}

我遗漏了什么非常明显的东西吗?

另外,我同时调用Registry.getToy("BAT")和Toys.getToy("BAT")..

这是失败的 TestRegistry

导入静态org.junit.Assert.*;

导入 org.junit.Before;导入 org.junit.Test;

公共(public)类 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 - 注册中心现在拥有该玩具

null - Toys.BAT 仍然具有 null 值。

最佳答案

当然需要查看Registry的代码才能知道问题出在哪里。

但一般来说,这样初始化静态变量是不安全的。也许在 Toys 类的加载时,Registry 仍然没有正确加载所有玩具条目。

关于java - 静态值未分配并返回空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10247525/

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