10

Tôi chủ yếu hiểu các vấn đề tiềm ẩn với ngoại lệ đã kiểm tra và lý do Kotlin bỏ qua chúng. Tuy nhiên, vấn đề tôi đang gặp phải là tôi không thể tìm thấy bất kỳ cách nào rõ ràng để chỉ rõ cho người gọi những gì ngoại lệ một chức năng có thể ném.Có cách nào dễ dàng để xem ngoại lệ của chức năng Kotlin?

Tôi đã gặp phải vấn đề vô số lần trong Python, nơi chương trình của tôi sẽ bị lỗi sau khi chạy trong nhiều tháng vì tôi không nhận ra chức năng từ một số thư viện mà tôi đang sử dụng. Mặc dù bị buộc bắt các ngoại lệ có thể khá vấn đề, nhưng thật tuyệt khi thấy rõ tất cả các ngoại lệ tiềm ẩn mà một hàm có thể ném ra.

Vì vậy, quay lại câu hỏi, có cách nào đơn giản để xem ngoại lệ mà một chức năng ném trong Kotlin không? Điều gì về các phương pháp viết bằng Java đang được gọi từ Kotlin? Ngay cả khi chỉ trong dụng cụ (intelliJ). Tôi không tính viết nó trong javadoc hoặc kdoc là người viết hàm bạn đang sử dụng có thể đã bỏ qua nó.

+0

Tôi cho rằng điều đó là không thể. Hãy xem xét những điều sau đây: 'val cls = Class.forName (a); val method = cls.getMethod (b); method.invoke() ', trong đó' a' và 'b' được đọc từ tệp hoặc được cung cấp bởi đầu vào của người dùng. Làm thế nào bạn có thể biết những gì ngoại lệ mã này ném trước khi bạn thực thi mã? –

+1

Tôi có nghĩa là bạn sẽ thiếu tất cả các loại thông tin loại khi bạn sử dụng sự phản chiếu. Các vấn đề tương tự sẽ không áp dụng nếu bạn đang sử dụng sự phản chiếu trong Java? Tôi nghĩ rằng nó vẫn sẽ hữu ích để biết những gì ngoại lệ có thể được ném trong trường hợp loại được biết đến tại thời gian biên dịch. – zjuhasz

Trả lời

4

Nếu bạn muốn biết ngoại lệ của phương thức Java khi Kotlin gọi từ IntelliJ, bạn có thể sử dụng phím tắt F1 để kéo javadoc và xem khai báo ném trong menu bật lên.

Chức năng Kotlin có thể khai báo ngoại lệ mà nó ném bằng cách sử dụng chú thích @Throws. Chú thích rõ ràng là tùy chọn, vì vậy bạn có thể không mong đợi điều này luôn tồn tại. Thật không may, khi bạn sử dụng phím tắt F1 trên một phương thức bằng cách sử dụng @Throws, nó không hiển thị các ngoại lệ được khai báo để được ném. Các cuộc gọi Java vào các phương thức này được yêu cầu để nắm bắt các ngoại lệ này được khai báo trong chú thích.

Kotlin javadoc có thể sử dụng chú thích @throws javadoc để cung cấp thêm ngoại lệ định nghĩa có thể được ném trong một hàm. Chúng xuất hiện trong javadoc và trong các cửa sổ bật lên trợ giúp F1. Tất nhiên đây cũng là tùy chọn.

+1

Javadoc là một giải pháp tốt cho mã của riêng tôi nhưng vấn đề là javadoc trong nhiều thư viện để lại rất nhiều điều mong muốn và bạn đang thực sự dựa vào nhà phát triển để có tài liệu kỹ lưỡng về mọi thứ. Tôi đoán tôi đã tìm kiếm một cái gì đó giống như một cảnh báo trong intelliJ hoặc công cụ khác, nơi tôi sẽ không phải tự kiểm tra bất cứ điều gì vì vậy tôi không vô tình bỏ lỡ một ngoại lệ từ một chức năng thư viện đó là không rõ ràng. Có vẻ như một thứ như vậy không tồn tại cho đến nay:/ – zjuhasz

+1

Vâng, đó là cách loại trừ các ngoại lệ hoạt động. Tôi biết nỗi đau của bạn. –

+1

Phím F1? Viết tốt hơn về tên hành động IntelliJ, không phải phím tắt có thể được ánh xạ lại. Không làm việc cho tôi. –

0

Thư viện này được gọi là Result là một giải pháp tốt đẹp. Nó trả về một đối tượng Result với một giá trị hoặc một ngoại lệ và thay đổi kiểu của nó thành thành công hay thất bại cho phù hợp. Chúng cũng có thể được xích lại với nhau bằng cách sử dụng các bản đồ thư viện và các hàm phẳng giúp loại bỏ các khối try-catch lồng nhau. Rất tuyệt, tôi khuyên mọi người nên tìm câu hỏi này để kiểm tra.

Tất nhiên điều này chỉ giúp với các chức năng tận dụng lợi thế của nó vì vậy tôi không đánh dấu điều này là câu trả lời.

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