[英]Null-safe valueOf method
我需要将几个String值转换为Integer,Boolean等,但由于输入值可能为null,因此我不能使用Integer.valueOf()
方法。 如果输入为null,我也需要输出对象为null,所以我不能使用apache commons NumberUtils.toInt() 。 是否存在现有的实现或更好的解决方案,而不仅仅是为每种类型编写实用程序方法(整数,布尔等)?
编辑:添加代码示例
String maxAgeStr = settings.get("maxAge"); //settings is a map, which may or //may not contain maxAge constraints.setMaxAge(Integer.valueOf(maxAgeStr)); // need null safety here String enableActionStr = settings.get("enableAction"); constraints.setEnableAction(Boolean.valueOf(enableActionStr)); // need null safety here
使用commons-lang
NumberUtils.createInteger()方法:
NumberUtils.createInteger(null); // null
NumberUtils.createInteger("5"); // 5
您的settings
对象应该支持具有不同返回类型的getter方法,例如:
public String getString(String name);
public int getInt(String name);
public boolean getBoolean(String name);
同样为了简单起见,您可以提供通用的get()
:
public <T> T get(String name);
这样,您就可以在一个位置(在设置中)进行转换,并且所有读取和使用设置的代码都将保持类型安全且无需进行大量转换。 此外,您还可以在一个中心位置引入默认值。
如果您没有很多设置,最好为每个设置添加直接的getter方法,例如:
public int getMaxAge();
public boolean isEnableAction();
触及Java 8:
Optional<String> maxAgeStr = Optional.ofNullable(settings.get("maxAge"));
maxAgeStr.ifPresent((str) -> { constraints.setMaxAge(Integer.valueOf(str)); });
Optional<String> enableActionStr = Optional.ofNullable(settings.get("enableAction"));
constraints.setEnableAction(Boolean.valueOf(enableActionStr.orElse(false)));
Optional<String> enableActionStr = Optional.ofNullable(settings.get("enableAction"));
constraints.setEnableAction(Boolean.valueOf(enableActionStr.orElseGet(() -> i%2 == 0)));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.