【问题标题】:How can we initialize a static map from outside class?我们如何从外部类初始化静态映射?
【发布时间】:2015-03-05 12:36:46
【问题描述】:

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

这是使用静态映射的类spinet:

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

    try {
        someSpaceMap = cacheService.getsomeSpaces();

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

【问题讨论】:

  • 我认为属性名称有错别字。
  • adspaceMap 未定义,发布 getsomeSpaces 定义

标签: java dictionary static


【解决方案1】:

试试这个

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      首先,修复您的命名约定以与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
      

      【讨论】:

      猜你喜欢
      • 2021-12-31
      • 1970-01-01
      • 2019-06-26
      • 1970-01-01
      • 1970-01-01
      • 2011-02-07
      • 1970-01-01
      • 1970-01-01
      • 2017-05-10
      相关资源
      最近更新 更多