Java最佳实践静态最终映射值

jos*_*efk 4 java optimization

我有一个实用工具类,其中包含带有某些值的静态最终映射。我需要在另一个课程中访问此地图。我应该只是将地图声明为公共地图,还是应该在实用工具类中编写吸气剂,从而让地图成为私有地图?

两种方法都可行,但是最佳实践是什么?

public MyUtilityClass {
  public static final Map<String, Integer> MAX_LENGTHS = ImmutableMap.of(
      "title", 256,
      "text", 512);

}

public MyAnotherClass {

  public void someMethod() {
    //accessing the map directly
    MAX_LENGTHS.get("title")
  }

}
Run Code Online (Sandbox Code Playgroud)

要么

public MyUtilityClass {
  private static final Map<String, Integer> MAX_LENGTHS = ImmutableMap.of(
      "title", 256,
      "text", 512);

  public static final getMaxLengthMap() {return MAX_LENGTHS;}
}

public MyAnotherClass {
  public void someMethod() {
    //accessing the map directly
    getMaxLengthMap().get("title")
  }
}
Run Code Online (Sandbox Code Playgroud)

好吧,实际上键是枚举值。就像是 :

private static final Map<String, Integer> MAX_LENGTHS = ImmutableMap.of(
      MyEnumClass.TITLE, 256,
      MyEnumClass.TEXT, 512);
Run Code Online (Sandbox Code Playgroud)

ass*_*ias 5

吸气剂没有添加任何东西-我只是将其公开。

有意义的是有一个直接返回值的方法:

public MyUtilityClass {
  private static final Map<String, Integer> MAX_LENGTHS = ImmutableMap.of(
      "title", 256,
      "text", 512);

  public static final getMaxLength(String item) {return MAX_LENGTHS.get(item);}
}

public MyAnotherClass {
  public void someMethod() {
    //accessing the map directly
    getMaxLength("title");
  }
}
Run Code Online (Sandbox Code Playgroud)

这也使您以后可以轻松修改基础实现。例如,您可以为不在地图等中的项目返回默认值。


Eug*_*ene 4

您正在使用ImmutableMap项目guava;因此是真正的不可变Map

做到这一点public不会伤害任何人——因为没有人能够Map以任何方式真正改变这一点。