为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕妹3146593 2022-12-21 12:01:59
我有一个实用程序类,其中包含一个带有一些值的静态最终映射。我需要在另一个班级访问这张地图。我应该只将地图声明为公共的,还是应该在实用程序类中编写一个 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);
查看完整描述

5 回答

?
杨__羊羊

TA贡献1943条经验 获得超7个赞

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


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


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

  }

}

这还允许您稍后轻松修改底层实现。例如,您可以为不在地图中的项目返回默认值等。


查看完整回答
反对 回复 2022-12-21
?
慕容森

TA贡献1853条经验 获得超18个赞

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

让它public不会伤害任何人——因为没有人能Map以任何方式真正改变它。


查看完整回答
反对 回复 2022-12-21
?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

我不得不说,您可能最好还是Enum首先使用 an 。由于此映射似乎总是完全静态的:


public enum MaxLength {

    TITLE(256),

    TEXT(512);


    public final int value;


    MaxLength(int value) {

        this.value= value;

    }

}

不再需要该实用程序类,您现在可以直接获取值:


int length = MaxLength.TITLE.value;


查看完整回答
反对 回复 2022-12-21
?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

这取决于您需要对地图做什么。允许直接访问地图(因此将其设置为公开),将使任何人都可以不受任何限制地使用和修改该地图。

在您的情况下,地图是最终的且不可变的,因此这不适用。

但是,如果您只想限制对其某些内容的访问,例如title,那么正确的选择是创建一个仅返回String.

将地图设置为公开,或创建一个返回整个地图的方法都没有区别。


查看完整回答
反对 回复 2022-12-21
?
侃侃无极

TA贡献2051条经验 获得超10个赞

我认为向拥有类添加吸气剂是可行的方法。


public MyUtilityClass {

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

      "title", 256,

      "text", 512);


  public static int getLength(final String key) {

     return MAX_LENGTHS.get(key);

  }

}


public MyAnotherClass {

  public void someMethod() {


    int x= MyUtilityClass.getLength("title")

  }

}

这MyAnotherClass避免了需要了解 getter 的任何实现细节,并使测试模拟变得更加容易。


查看完整回答
反对 回复 2022-12-21
  • 5 回答
  • 0 关注
  • 128 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信