2012-08-31 7 views
7

Có một lớp ngoại lệ thích hợp cho các đối số dòng lệnh không hợp lệ trong API Java hay tôi có phải tạo của riêng mình không? Tôi đã cố gắng tìm kiếm một nhưng không thể tìm thấy bất kỳ trong API.Java Invalid Command Line Arguments Exception

Đây là nhiệm vụ vì vậy tôi không thể sử dụng thư viện của bên thứ ba để phân tích cú pháp dòng lệnh.

Trả lời

4

Cách tốt nhất để xử lý các tham số hoặc kết hợp dòng lệnh không xác định không có ý nghĩa đối với chương trình là hiển thị thông báo lỗi và cung cấp đầu ra tập quán.

Cá nhân, tùy thuộc vào độ phức tạp của dòng lệnh, tôi sẽ tạo một phương thức được gọi là "sử dụng" (thường là tĩnh) có thể có thông báo lỗi tùy chọn được chuyển cho nó.

Trong khi phân tích tham số dòng lệnh được chuyển vào chương trình, tôi sẽ gọi phương thức này và thoát, qua cờ hoặc trực tiếp hoặc có lối thoát cuộc gọi phương thức usage cho tôi.

Nhưng đó chỉ là tôi

0

Đối số dòng lệnh có dạng String[]. Nếu bạn đang mong đợi đầu vào ở một dạng nhất định hoặc một thứ tự nhất định, bạn có thể ném một ngoại lệ mà bạn tạo ra để đối phó với nó (mặc dù, ném một ngoại lệ sẽ chấm dứt chương trình, bạn cần xử lý nó một cách duyên dáng nếu đó là bắt buộc).

9

Hầu hết các lần, khi đối số nhận được không hợp lệ, đó là thành ngữ phổ biến để ném IllegalArgumentException.

public class IllegalArgumentException kéo dài RuntimeException

Ném để cho biết rằng một phương pháp đã được thông qua một bất hợp pháp hoặc không phù hợp tranh cãi.

+1

tôi đã xem xét sử dụng này, nhưng tôi nghĩ rằng RuntimeExceptions (trường hợp ngoại lệ được kiểm soát) có nghĩa vụ phải phản ánh một vấn đề mà các lập trình viên đã làm sai trong khi kiểm tra ngoại lệ sẽ được sử dụng cho những thứ ngoài tầm kiểm soát của lập trình viên . Hay điều này chỉ quan trọng khi thiết kế API? – Michael

+3

Tôi có xu hướng sử dụng các ngoại lệ không được kiểm tra cho các tình huống mà chương trình của bạn không thể phục hồi khi chạy. Một đối số không hợp lệ được truyền cho một phương thức là một trường hợp như vậy, đó là lỗi của một lập trình viên. Ví dụ, khi bạn cố gắng khởi tạo một 'ArrayList' với công suất ban đầu * âm *, nó sẽ ném một' IllegalArgumentException'. Tại sao? Bởi vì nó không phải là nhận được rằng, và nó không thể làm việc với một năng lực tiêu cực; đó là lỗi của một lập trình viên. Đây là một liên kết thảo luận về vấn đề này http://www.javapractices.com/topic/TopicAction.do?Id=129. –

+0

Ngoài ra, nếu bạn sử dụng ngoại lệ đã kiểm tra, mọi phương thức gọi điện của bạn cần phải nắm bắt ngoại lệ này. Imho, điều này hơi kỳ quặc, bởi vì về cơ bản bạn thừa nhận rằng bạn có thể có lỗi trong mã của bạn mà làm cho nó vượt qua * không hợp lệ * giá trị/đối số cho phương pháp khác. Và khi điều này xảy ra, không có gì bạn có thể làm về nó, nhưng sửa chữa * lỗi * gây ra điều này. –