我们如何从外部类初始化静态地图?

时间:2015-03-04 13:56:57

标签: java dictionary static

在一个初始化为Map的类中有一个静态Map,但它们不是像这个类中的HashMap或TreeMap那样实现Map接口。现在我需要创建一个单元测试用例,我需要在我的项目中使用这个地图。但是当我试图在其他类中创建它的实现时,我每次都找到了null对象。我想我缺少一些java编程的核心概念。 请帮我解决这个问题。

这是使用静态地图的类spinet:

public static Map<Integer, someSpace> someSpaceMap = null;
public static boolean loadMyCache(){

    try {
        someSpaceMap = cacheService.getsomeSpaces();

    } catch (Throwable e) {
        e.printStackTrace();
        return false;
    }
}

3 个答案:

答案 0 :(得分:1)

试试这个

public static Map<Integer, someSpace> someSpaceMap = null;
static {
    try {
        someSpaceMap = CacheService.getsomeSpaces();
    } catch (Throwable e) { // Discouraged
        e.printStackTrace();
    }
}

答案 1 :(得分:0)

谢谢大家,我找到了解决方案。我可以使用任何地图实现在课外初始化。请记住,如果您使用的Java版本低于5,请确保将原语更改为Wrapper类对象,因为Map接口签名是这样的: public interface Map&lt; K,V&gt; .Java 1.4不支持自动装箱。

答案 2 :(得分:0)

首先,修复您的命名约定以与Java standard对齐。

public static Map<Integer, someSpace> someSpaceMap = null;

someSpace应该是SomeSpace,因为它是一个类名。

由于未定义缓存服务,我假设其是静态调用,您还需要在方法名称上修复案例

someSpaceMap = CacheService.getSomeSpaces();

接下来,您可以在声明时使用值初始化Map,如下所示:

import java.util.HashMap;
import java.util.Map;

public class TestRunner {

    public static Map<Integer, SomeSpace> someSpaceMap = new HashMap<Integer, SomeSpace>(){{
        put(1, new SomeSpace());
        put(2, new SomeSpace());
        put(3, new SomeSpace());
    }};

    public static void main(String[] args) {
        for(Map.Entry e : someSpaceMap.entrySet()){
            System.out.println("key " + e.getKey() + " value " + e.getValue());
        }
    }
}

class SomeSpace {}

示例输出

key 1 value com.SomeSpace@4e50df2e
key 2 value com.SomeSpace@1d81eb93
key 3 value com.SomeSpace@7291c18f