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

我有一个实用程序类,其中包含一个带有一些值的静态最终映射。我需要在另一个班级访问这张地图。我应该只将地图声明为公共的,还是应该在实用程序类中编写一个 getter,从而让地图成为私有的?


两种方式都有效,但最佳做法是什么?


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")

  }


}

要么


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")

  }

}

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


private static final Map<String, Integer> MAX_LENGTHS = ImmutableMap.of(

      MyEnumClass.TITLE, 256,

      MyEnumClass.TEXT, 512);


慕妹3146593
浏览 129回答 5
5回答

杨__羊羊

吸气剂不添加任何东西 - 我只是将其公开。可能有意义的是有一个直接返回值的方法:public MyUtilityClass {&nbsp; private static final Map<String, Integer> MAX_LENGTHS = ImmutableMap.of(&nbsp; &nbsp; &nbsp; "title", 256,&nbsp; &nbsp; &nbsp; "text", 512);&nbsp; public static final getMaxLength(String item) {return MAX_LENGTHS.get(item);}}public MyAnotherClass {&nbsp; public void someMethod() {&nbsp; &nbsp; //accessing the map directly&nbsp; &nbsp; getMaxLength("title");&nbsp; }}这还允许您稍后轻松修改底层实现。例如,您可以为不在地图中的项目返回默认值等。

慕容森

您正在使用ImmutableMap项目guava;因此是一个真正的不可变Map.让它public不会伤害任何人——因为没有人能Map以任何方式真正改变它。

有只小跳蛙

我不得不说,您可能最好还是Enum首先使用 an 。由于此映射似乎总是完全静态的:public enum MaxLength {&nbsp; &nbsp; TITLE(256),&nbsp; &nbsp; TEXT(512);&nbsp; &nbsp; public final int value;&nbsp; &nbsp; MaxLength(int value) {&nbsp; &nbsp; &nbsp; &nbsp; this.value= value;&nbsp; &nbsp; }}不再需要该实用程序类,您现在可以直接获取值:int length = MaxLength.TITLE.value;

陪伴而非守候

这取决于您需要对地图做什么。允许直接访问地图(因此将其设置为公开),将使任何人都可以不受任何限制地使用和修改该地图。在您的情况下,地图是最终的且不可变的,因此这不适用。但是,如果您只想限制对其某些内容的访问,例如title,那么正确的选择是创建一个仅返回String.将地图设置为公开,或创建一个返回整个地图的方法都没有区别。

侃侃无极

我认为向拥有类添加吸气剂是可行的方法。public MyUtilityClass {&nbsp; private static final Map<String, Integer> MAX_LENGTHS = ImmutableMap.of(&nbsp; &nbsp; &nbsp; "title", 256,&nbsp; &nbsp; &nbsp; "text", 512);&nbsp; public static int getLength(final String key) {&nbsp; &nbsp; &nbsp;return MAX_LENGTHS.get(key);&nbsp; }}public MyAnotherClass {&nbsp; public void someMethod() {&nbsp; &nbsp; int x= MyUtilityClass.getLength("title")&nbsp; }}这MyAnotherClass避免了需要了解 getter 的任何实现细节,并使测试模拟变得更加容易。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java