gpt4 book ai didi

java - 以 if else 的方式使用 try/catch,但以异常作为条件?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:15:50 25 4
gpt4 key购买 nike

  • 如果我在列表中搜索某个元素但没有找到,我抛出一个 NotInListException
  • 否则我想将它添加到另一个列表

我实现了这个

try {

element = actualList.find("foo");
anotherList.append(element);

}
catch (NotInListException e) {
}

这个用法可以吗?或者我应该像这样重构它:

if ((element = actualList.find("foo")) != null) {
anotherList.append(element);
}

最佳答案

如果您忽略异常处理程序给出的小的运行时惩罚,这是一个风格问题。

可以设计一个堆栈类型

try{
while(true){
try{
stack.pop();
catch(StackElement e){
processElement(e);
}
}
catch(EmptyStackException ese){
// probably not much to do here.
}

共识是,出于可读性和常识的原因,通常的 if 条件使事情更容易理解。异常机制应该用于异常情况,而不是用于常规流量控制。

在您查找的特定示例中,您有两种情况,没有一种情况不同寻常。所以异常(exception)可能是不必要的。

1 - 没有找到该元素。

2 - 找到元素。

情况 2 需要特别注意,因为您的 find 版本也希望返回实际元素。

1 || 2 是 boolean 情况。所以那不应该是一个元素。案例 2 的 find() 应该是一个元素。

我一直不喜欢为非值返回 null。它会产生丑陋的代码。回想一下

void f(BufferedReader br){
String line;
while( (line = br.readLine()) != null)

更好的方法是将 boolean 值与元素分开。

if( list.has(foo) ){
E element = list.get(foo);
}

关于java - 以 if else 的方式使用 try/catch,但以异常作为条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35820275/

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