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");
}
}
这还允许您稍后轻松修改底层实现。例如,您可以为不在地图中的项目返回默认值等。
TA贡献1853条经验 获得超18个赞
您正在使用ImmutableMap
项目guava
;因此是一个真正的不可变Map
.
让它public
不会伤害任何人——因为没有人能Map
以任何方式真正改变它。
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;
TA贡献1757条经验 获得超8个赞
这取决于您需要对地图做什么。允许直接访问地图(因此将其设置为公开),将使任何人都可以不受任何限制地使用和修改该地图。
在您的情况下,地图是最终的且不可变的,因此这不适用。
但是,如果您只想限制对其某些内容的访问,例如title
,那么正确的选择是创建一个仅返回String
.
将地图设置为公开,或创建一个返回整个地图的方法都没有区别。
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 的任何实现细节,并使测试模拟变得更加容易。
添加回答
举报