Effective Java 57 Use exceptions only for exceptional conditions
2014-04-21 23:57 小郝(Kaibo Hao) 阅读(406) 评论(0) 编辑 收藏 举报Principle
-
Exceptions are, as their name implies, to be used only for exceptional conditions; they should never be used for ordinary control flow.
// Horrible abuse of exceptions. Don't ever do this!
try {
int i = 0;
while(true)
range[i++].climb();
} catch(ArrayIndexOutOfBoundsException e) {
}
-
A well-designed API must not force its clients to use exceptions for ordinary control flow.
for (Iterator<Foo> i = collection.iterator(); i.hasNext(); ) {
Foo foo = i.next();
...
}
If Iterator lacked the hasNext method, clients would be forced to do this instead:
// Do not use this hideous code for iteration over a collection!
try {
Iterator<Foo> i = collection.iterator();
while(true) {
Foo foo = i.next();
...
}
} catch (NoSuchElementException e) {
}
-
An alternative to providing a separate state-testing method is to have the state dependent method return a distinguished value such as null if it is invoked with the object in an inappropriate state. This technique would not be appropriate for Iterator, as null is a legitimate return value for the next method.
-
Guidelines to choose between a state-testing method and a distinguished return value.
Different concerns |
State-testing method |
Distinguished value |
Concurrent Object Accessing without external synchronization/externally induced state transitions |
N |
Y |
Performance concerns |
N |
Y |
Other situations except the conditions above |
Y |
N |
Readability |
Y |
N |
Incorrect use detectable |
Y |
N |
Summary
Exceptions are designed for use in exceptional conditions. Don't use them for ordinary control flow, and don't write APIs that force others to do so.
出处:http://www.cnblogs.com/haokaibo/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。