gpt4 book ai didi

java - Java中如何统一处理 "Exception or null"的情况?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:12:58 25 4
gpt4 key购买 nike

例如,我需要使用 getFoo() 方法获取一个 Foo 对象:

Foo foo = getFoo();

在此之后,我想处理 getFoo() 没有成功返回 Foo 对象的情况。这又包括两种情况:

  1. getFoo() 抛出异常。
  2. getFoo() 的返回结果为 null、空字符串、0 或任何应被视为“空结果”的内容。

理想情况下,我希望 getFoo() 抛出异常而不是返回空结果,但有时这可能是对另一个我不拥有的包中的方法的调用。

这些是我能想到的方法:

1。重复处理代码

Foo foo = null;
try {
foo = getFoo();
} catch (ResourceNotFoundException ex) {
logger.warn("blablabla");
foo = defaultFoo;
someOtherComplicatedStuff();
}
if (null == foo) {
logger.warn("blablabla");
foo = defaultFoo;
someOtherComplicatedStuff();
}

这绝对不是一个好主意。

2。将处理逻辑移至单个函数

Foo foo = null;
try {
foo = getFoo();
} catch (ResourceNotFoundException ex) {
handleNullFoo(var1, var2, var3, var4);
}
if (null == foo) {
handleNullFoo(var1, var2, var3, var4);
}

问题是逻辑可能会使用很多局部变量。将这些变量传递给外部函数没有多大意义。更糟糕的是,在此过程中可能需要修改某些变量。我不认为修改函数中的参数是一个好习惯,更不用说如果参数是原始类型可能会导致的问题。

3。抛出一个虚假的异常

Foo foo = null;
try {
foo = getFoo();
if (null == foo) {
throw new ResourceNotFoundException();
}
} catch (ResourceNotFoundException ex) {
logger.warn("blablabla");
foo = defaultFoo;
someOtherComplicatedStuff();
}

这是迄今为止最简洁的方法,但它更像是一种 hack。在异常类不属于的包中抛出 ResourceNotFoundException 可能是不合适的。它还降低了代码的可读性,因为人们可能没有意识到异常是在函数内部处理的。

那么,你有什么建议?

非常感谢!

最佳答案

这是另一种选择:

Foo foo = null;
try {
foo = getFoo();
} catch (ResourceNotFoundException ex) {
//TODO: log exception?
foo = null;
}

if (null == foo) {
logger.warn("blablabla");
foo = defaultFoo;
someOtherComplicatedStuff();
}

请注意,catch 子句中的 foo = null; 几乎肯定是不必要的。只有在 foo = getFoo() 之后有一些可以抛出 ResourceNotFoundException 的代码时才需要它。

关于java - Java中如何统一处理 "Exception or null"的情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14387434/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com