我已經實現瞭解析類的run方法,它處理一些輸入管道while循環是這樣的:如何知道異常來自哪裏?
while (true) {
try {
// do something
}
catch (EndOfStreamException e) {
closePorts();
break;
}
}
現在,我的問題是,我處理一個以上輸入流,所以我不能只關閉第一個異常的所有端口。我必須知道哪一個輸入流將它拋出,然後關閉那個流。
這裏的最佳做法是什麼?有沒有辦法將這些信息添加到異常本身?我是否必須將有關哪個輸入流的信息作爲String發送到消息,然後解析此String?
我想要做這樣的事情:
while (true) {
try {
// do something
}
catch (EndOfStreamException e) {
closePort(e.getIndexOfPort); // something like this??
break;
}
}
預先感謝您!
Philipp
錯誤,爲每個端口上的I/O寫一個單獨的'catch'塊? – EJP
使用異常來查找流的結束是不好的做法,一般來說...查看http://programmers.stackexchange.com/questions/189222/are-exceptions-as-control-flow-considered-a-serious -antipattern-if-so-why – Rohan
處理流的結束並不是特例。您應該檢測try-block內的流結束。例外情況適用於特殊情況,不適用於正常程序流程。 –