2012-04-26 27 views
7

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

+1

giúp đỡ chúng tôi để giúp bạn, hiển thị một số mã –

+0

Không thể sao chép, bạn có thể cung cấp một ví dụ hoàn chỉnh? – axtavt

+0

Các lớp học đầy đủ hiện có trên –

Trả lời

6

Tôi có thể tạo lại điều này trên Helios với 2.9.1. Nó là một lỗi trong trình biên dịch trình bày, và bạn nên nâng cao nó như là một lỗi trên http://www.assembla.com/spaces/scala-ide/tickets.

+2

Cảm ơn. Nó có thể hoặc không thể là bản sao của http://scala-ide-portfolio.assembla.com/spaces/scala-ide/tickets/[email protected] scala-đặc điểm, nhưng tôi sẽ nâng nó một cách riêng biệt cho bây giờ –

+0

@ David Bắc Tôi khá chắc chắn nó là một bản sao của vé bạn liên kết. Có thể bạn có thể thêm trường hợp kiểm tra của mình vào cùng một vé. –

+0

Đã kết thúc việc tăng http://scala-ide-portfolio.assembla.com/spaces/scala-ide/support/tickets/[email protected]ing - mã –

2

Để tham khảo trong tương lai, sự cố này đã được khắc phục (https://github.com/scala-ide/scala-ide/commit/055a81cd3fe792e4327668791888c30cf04793f5). Sửa chữa đã có sẵn với cả hai Scala IDE 2.0.x and Helium nightlies. Hơn nữa, nó sẽ được đưa vào bản phát hành bảo trì Scala IDE 2.0.2 tiếp theo.

(xin lỗi vì tiếng ồn bổ sung, nhưng tôi nhận ra rằng có một câu trả lời đã được nhiều hơn có thể nhìn thấy hơn một lời nhận xét đơn giản)

Các vấn đề liên quan