2

java函数通过异常返回值是最佳实践还是有任何缺点?我的要求是一个 java DAO 函数返回给我一个大小有限的数据集合(基本上是延迟加载)。我需要得到集合的总大小。所以我的想法是,如果我将一个标志传递给 java DAO 函数以获得总计数,那么挑战就是从 java DAO 函数返回计数。可以通过异常获得计数吗?这是一个好方法吗?任何其他解决方案总是受欢迎的。

编辑:
例外的原因是:让我解释一下用例:我有一个动作层和一个道层。现在在动作层中,我使用了“5(if,else)条件”来从数据库中获取不同类型的数据收集,但数量有限。现在我的下一个行动任务是在没有限制的情况下获取集合的总数。如何做是避免更多 if 条件的问题。所以我想的是使用 EXCEPTION 返回总计数并在动作层处理干净。在这里,我需要总数或数据列表。

4

5 回答 5

4

java函数通过异常返回值是最佳实践吗

我不会考虑这种好的做法。仅在特殊情况下使用异常,而不是在处理正常程序流时。

挑战是从 java DAO 函数返回计数

您始终可以返回一个容器而不是单个值。将要返回的所有值添加到容器对象中,然后返回容器对象:

public MyContainer getDAOListAsContainer() {
   MyList myList = ...;   // get the list from somewhere
   int mySize = 42;
   return new MyContainer(myList, mySize);
}

除此之外,java 集合类通常已经通过它们的size()方法“知道”它们的大小。所以如果你已经有类似 a 的东西List,你可以得到它的大小

List result = getDAOList();
// result.size() now contains the number of elements
于 2013-07-30T13:45:16.907 回答
2

异常表示异常行为——也就是说,发生了一些你没有预料到的事情。关于应用程序的状态,您所知道的只是出现了问题;您实际上并不知道计数是否会返回(因为数据库可能是正确的,但您的 ORM 层不一致)。

我不会考虑从异常中获取“嘿-DAO 出了点问题”之外的任何信息。

于 2013-07-30T13:46:52.667 回答
1

我不认为这是一个好方法。

使用异常来获取信息甚至控制流会对性能产生影响,因为 java 在创建和抛出异常的过程中需要收集大量的信息。

于 2013-07-30T13:56:40.597 回答
0

这不是一个好习惯——通常没有人以这种方式使用异常。
因此,以后维护代码的人会感到困惑/烦人。

于 2013-07-30T14:01:28.297 回答
0

使用 POJO 封装两者,然后返回。

void CollectionAndSize methodInDAO(boolean neededCollection, boolean neededTotalCount)
{
CollectionAndSize cas = new CollectionAndSize();

//Some code here.
if(neededCollection)
    { 
    collection = getLimitedCollection();
    cas.setCollection(collection);
    } 

if(neededTotalCount)
    { 
    totalRecords = = getnumberOfRecords();
    cas.setTotalRecords(totalRecords );
    }
return cas;
}
于 2013-07-30T13:51:16.607 回答