在方法 return 中强制使用 Integer 而不是 int
Force use of Integer instead int in method return
我有一组方法可以读取 属性 值和 return Integer、Float[=26] 中的值=] 或 String.
接下来的问题是:
如果开发者这样做:
int value = prop.getValueInteger("id.property");
如果该方法未找到 属性 或有 NumberFormatException,我将 return 设为 null。在这种情况下,分配失败并出现 NullPointerException。与方法 Float 版本相同(字符串被覆盖,因为它们不使用原语)
我知道程序员可能被迫捕获可能的异常,但我更喜欢是否有任何选项可以强制开发人员使用 Integer 而不是 int。
为了防止开发人员只是分配给 int
,当您有一个可能不存在的值时,您可以 return Optional<Integer>
// never null
Optional<Integer> value = prop.getValueInteger("id.property");
if (value.isPresent()) {
int v = value.get();
您还可以再次为 Optional<Float>
和 Optional<String>
赋值,以处理可能不存在的值。
另一种选择是永不 return 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);
}
我有一组方法可以读取 属性 值和 return Integer、Float[=26] 中的值=] 或 String.
接下来的问题是:
如果开发者这样做:
int value = prop.getValueInteger("id.property");
如果该方法未找到 属性 或有 NumberFormatException,我将 return 设为 null。在这种情况下,分配失败并出现 NullPointerException。与方法 Float 版本相同(字符串被覆盖,因为它们不使用原语)
我知道程序员可能被迫捕获可能的异常,但我更喜欢是否有任何选项可以强制开发人员使用 Integer 而不是 int。
为了防止开发人员只是分配给 int
,当您有一个可能不存在的值时,您可以 return Optional<Integer>
// never null
Optional<Integer> value = prop.getValueInteger("id.property");
if (value.isPresent()) {
int v = value.get();
您还可以再次为 Optional<Float>
和 Optional<String>
赋值,以处理可能不存在的值。
另一种选择是永不 return 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);
}