有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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仍然有空值


共 (3) 个答案

  1. # 1 楼答案

    你查过蝙蝠和蝙蝠的案子了吗

  2. # 2 楼答案

    @Before
    public void setUp() throws Exception {
        System.out.println(Toys.BAT);  > Loads class and initializes static variables
        Registry.putToy("BAT", new Toy());  > populates Registry (HashMap)
        Registry.putToy("DOLL", new Toy());  > populates Registry (HashMap)
    }
    

    在加载玩具类之前,需要初始化注册表中的值。我同意评论人士的看法,他们说这不是初始化这些文件的好方法

  3. # 3 楼答案

    当然,研究Registry的代码对于了解问题所在是必要的

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