Vâng, tôi nhận được thông qua các câu hỏi liên quan, tôi đã đọc mã nguồn của JDK 1.7, nhưng tôi không tìm thấy câu trả lời.JDK 1.7 Phương thức `addSuppressed()` có thể ném được
Trong câu hỏi này, tôi muốn bỏ qua hoàn toàn fillInStackTrace
.
Phương thức JDK 1.4 initCause()
đã được thêm vào. Ví dụ, khi bạn sử dụng phản chiếu cốt lõi để gọi phương thức bạn nhận được InvocationTargetException với nguyên nhân có ngoại lệ đích trong nó.
Khi tôi thấy tính năng này tôi bắt đầu sử dụng nó cũng trong một kịch bản như thế này
try {
//contains some code that can throw new IOException();
}
catch(IOException e){
throw new RuntimeException(e);
}
Vì vậy, tôi bắt một ngoại lệ, tôi chưa sẵn sàng để đối phó với nó ở đây và tôi rethrow ngoại lệ mới nơi tôi có ngoại lệ ban đầu là nguyên nhân. Trong một số scenarious không RuntimeException, nhưng ngoại lệ tùy chỉnh của tôi được sử dụng, vì vậy đôi khi tôi cũng gọi đến e.getCause()
để xử lý đúng ngoại lệ này trong khối bên ngoài.
Đây là tình huống trước JDK 1.7. Tại sao và khi nào tôi nên sử dụng addSuppressed()
? Tôi có nên thay đổi mã ở trên để
try {
//contains some code that can throw new IOException();
}
catch(IOException e){
RuntimeException re= new RuntimeException(e.getMessage());
re.addSuppressed(e);
throw re;
}
Và như một câu hỏi tại sao tiền thưởng không addSuppressed()
trở Throwable
như initCause()
không cho phép throw (RuntimeException)new RuntimeException().initCause(e);
? Ví dụ tại sao tôi không thể làm ?:
try {
//contains some code that can throw new IOException();
}
catch(IOException e){
throw (RuntimeException)new RuntimeException(e.getMessage()).addSuppressed(e);
}
tôi trích ra câu trả lời cho một bài riêng biệt.
bạn không hiểu gì từ javadoc của phương pháp được đề cập? tôi chưa bao giờ thấy phương thức 'addSuppressed()' trước đây, nhưng việc đọc nhanh javadoc đã làm cho nó rõ ràng mục đích của nó là gì. (gợi ý, trong trường hợp sử dụng ví dụ của bạn nó sẽ _not_ có ý nghĩa). – jtahlborn
Vâng, javadoc là không đủ. Tại sao downvote câu hỏi? – alexsmail
tại sao không đủ, bạn không hiểu gì? – jtahlborn