java函数通过自定义异常返回值是一个好方法吗?

时间:2013-07-30 13:42:54

标签: java return

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

编辑:
异常的原因是:让我解释一下用例:我有一个动作层和一个dao层。现在在动作层我已经使用了“5(如果,否则)条件”来获得不同类型的数据集合以及来自DB的有限计数。现在我的下一个操作任务是获取集合的总数而不受限制。怎么办是避免更多if条件的问题。所以我认为使用EXCEPTION返回总计数并处理动作层中的清理。在这里,我需要总计数或数据列表。

5 个答案:

答案 0 :(得分:4)

  

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

我不会考虑这个好习惯。 Use Exceptions for exceptional circumstances only, not when handling normal program flow.

  

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

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

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

除此之外,java集合类通常通过size()方法“知道”它们的大小。因此,如果您已经拥有类似List的内容,则可以获得类似

的大小
List result = getDAOList();
// result.size() now contains the number of elements

答案 1 :(得分:2)

异常表示异常行为 - 也就是发生了一些您没想到的事情。你对应用程序状态的所有了解都是出了问题。你实际上并不知道计数是否会回来(因为数据库可能是正确的,但你的ORM层是不一致的)。

我不会考虑从例外中获取任何信息,“嘿 - DAO的问题”。

答案 2 :(得分:1)

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

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

答案 3 :(得分: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;
}

答案 4 :(得分:0)

这不是一个好习惯 - 没有人通常以这种方式使用例外 因此,对于维护代码的人来说,这会让人感到困惑/烦恼。