Tôi có một số mã Scala như thế này:@throws trong Scala không cho phép gọi Java để bắt ngoại lệ đúng loại
class Callee {
@throws(classOf[MyCheckedException])
def doStuff() {
}
}
Gọi nó từ Java như vậy:
public class Caller {
public static void main(String[] args) {
// this won't compile; the Java compiler complains that the catch block is unreachable
// however without the catch block, it complains "unhandled exception MyCheckedException"
try {
new Callee().doStuff();
}
catch (MyCheckedException e) {
}
}
}
Loại bỏ các khối catch kết quả là một lỗi từ trình biên dịch Java nói 'loại trừ ngoại lệ MyCheckedException'. Thêm khối catch cho kết quả MyCheckedException trong trình biên dịch phàn nàn về khối catch không thể truy cập được, vì ngoại lệ không bao giờ bị ném.
Nếu tôi bắt ngoại lệ và thực hiện một instanceOf, tôi có thể bẫy đúng ngoại lệ sắp ra khỏi doStuff, nhưng tôi nghĩ chú thích @throws được cho là tạo ra bytecode phù hợp cho khối catch thích hợp hoạt động. Tôi có sai hay có lỗi ở đây không?
Để ghi lại, điều này là với Scala 2.9.2 và Java 1.6.
Chỉnh sửa: Nó biên dịch tốt gọi javac/scalac bằng sbt từ dòng lệnh. Lỗi này chỉ rõ ràng trong quá trình biên dịch-khi-bạn-loại trong Eclipse, điều này cho thấy lỗi nằm trong Trình biên dịch Java Eclipse hoặc một phần nào đó của IDE. Người khác có thể tái tạo nó theo cách này không? Tôi đang sử dụng Eclipse 3.7.2
giúp đỡ chúng tôi để giúp bạn, hiển thị một số mã –
Không thể sao chép, bạn có thể cung cấp một ví dụ hoàn chỉnh? – axtavt
Các lớp học đầy đủ hiện có trên –