java - 如何为程序只填充一次HashMap对象?

标签 java static hashmap instantiation

考虑到我更广泛的计划的以下部分:

public class AnimalNames {
  private static String[] animalNames = {dog, cat, horse, cow, donkey, elephant};
  private static String[] animalNameAbbreviations = {d, c, h, co, d, e};
  public static HashMap<String, String> getAnimalNameTranslations() {
    HashMap<String, String> animalNameTranslations = new HashMap<String, String>();
    for (int i = 0; i < animalNames.length; i++) {
      animalNameTranslations.put(animalNameAbbreviations[i], animalNames[i])
    }
    return animalNameTranslations;
  }
}

我能够访问填充的animalNameTranslations(使用static关键字),而无需实例化AnimalNames类,这正是我想要的。然而,我的程序仍然必须在每次我想访问它时填充animalNameTranslations(使用for循环)。有没有办法为我的程序只填充一次 HashMap 对象?

最佳答案

您可以从静态初始化 block 中调用 getAnimalNameTranslations 方法,该方法将在类初始化时执行一次。您必须添加一个静态成员来保存该方法返回的 Map。

例如:

private static HashMap<String, String> animalNameTranslations;
static {
    animalNameTranslations = getAnimalNameTranslations ();
}

或者只是将该方法的逻辑直接移至静态初始化 block 。

  private static HashMap<String, String> animalNameTranslations;
  static {
    animalNameTranslations = new HashMap<String, String>();
    for (int i = 0; i < animalNames.length; i++) {
      animalNameTranslations.put(animalNameAbbreviations[i], animalNames[i])
    }
  }

关于java - 如何为程序只填充一次HashMap对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30554279/

相关文章:

java - 在运行时更改哈希码

go - 无法使用 if val 从 Golang 中的 map[time.Time]Measure 获取值,ok := mapMeasures[ts]; ok {}

java - 为什么 UIManager.getDefaults().keySet() 返回的值与 UIManager.getDefaults().keys() 不同?

java - 如果计数器达到特定数字,如何向按钮添加声音?

c# - 使用 ModuleBuilder 将类标记为 `internal static`

java - SimpleThreads 示例中的 threadMessage 是否应该同步?

java - 当 String 作为键时,什么会导致 HashMap containsKey() 失败?

java - android.support.design.widget.TabLayout - 无法解析符号 'design'

java - 使用 Jena 读取 Turtle 中带空格的 URI?

c++ - "undefined reference"到从静态方法访问的模板类的静态成员