在一个初始化为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;
}
}
答案 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