在方法返回时强制使用Integer而不是int

时间:2017-02-20 09:47:01

标签: java wrapper

我有一组方法可以读取属性值并返回整数浮点数字符串中的值。

接下来是问题:

如果开发人员这样做:

int value = prop.getValueInteger("id.property");

如果方法没有找到属性或者有 NumberFormatException ,我将返回null。在这种情况下,赋值在NullPointerException中失败。与Float版本的方法相同(Strings被覆盖因为它们不使用原语)

我知道程序员可能会被迫捕获可能的异常,但是如果有任何选项迫使开发人员使用Integer而不是int,我会感到很担心。

1 个答案:

答案 0 :(得分:3)

为了防止开发人员只分配到int,当您的值可能不存在时,您可以返回Optional<Integer>

// never null
Optional<Integer> value = prop.getValueInteger("id.property");
if (value.isPresent()) {
    int v = value.get();

您还可以再次评估Optional<Float>Optional<String>以处理可能不明确的值。

另一种选择是永远不会返回null,而是使用默认值。

int value = prop.getValueInteger("id.property", -1);

这假设您无法抛出更有用的异常,例如

public int getValueInteger(String name) throws IllegalStateException {
     Object v = getValue(name);
     if (v == null) throw new IllegalStateException("Property " + name + " not set.");
     return convertTo(Integer.class, v);
}