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

问题描述 投票:0回答:1

我有一组方法可以读取属性值并返回 IntegerFloatString 中的值。

接下来的问题是:如果开发人员这样做:

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

如果该方法未找到该属性或有 NumberFormatException,我将返回 null。在这种情况下,分配失败并出现 NullPointerException。与方法 Float 版本相同(字符串被覆盖,因为它们不使用原语)

我知道程序员可能被迫捕获可能的异常,但我更喜欢是否有任何选项可以强制开发人员使用 Integer 而不是 int。

java wrapper
1个回答
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);
}
© www.soinside.com 2019 - 2024. All rights reserved.