2009-05-24 29 views
20

Kết quả nào khi bạn chuyển một chuỗi rỗng vào một cuộc gọi Java enum .valueOf?Kết quả nào khi bạn chuyển một chuỗi rỗng vào một cuộc gọi Java enum .valueOf?

Ví dụ:

public enum Status 
{ 
    STARTED, 
    PROGRESS, 
    MESSAGE, 
    DONE; 
} 

và sau đó

String empty = ""; 

switch(Status.valueOf(empty)) 
{ 
    case STARTED: 
    case PROGRESS: 
    case MESSAGE: 
    case DONE: 
    { 
     System.out.println("is valid status"); 
     break; 
    } 
    default: 
    { 
     System.out.println("is not valid"); 
    } 
} 

Về cơ bản, tôi muốn biết nếu tôi đang sử dụng một câu lệnh switch với enum, trường hợp mặc định sẽ được gọi là hoặc sẽ tôi nhận được một ngoại lệ của một số loại?

+3

Tại sao không bạn chỉ cần chạy mã hoặc đọc các javadocs? Thực thi mã là nguồn chân lý tối thượng. Nếu mã không đúng, nó làm sai và cần phải được sửa. –

+1

Tôi nghĩ rằng nó có thể là một câu hỏi hữu ích có thể được tìm kiếm trên SO. Tài liệu cho phương thức cụ thể đó không có trong tài liệu api java, mặc dù nó nằm trong thông số lang. –

Trả lời

39

Bạn sẽ nhận được một IllegalArgumentException nếu tên không phải là của một enum (mà nó sẽ không được cho chuỗi rỗng). Điều này được tạo trong tài liệu API cho tất cả các phương thức enum valueOf. Bạn sẽ nhận được NullPointerException cho null. Có thể không phải là một ý tưởng tốt để đưa ra giá trị giả cho biến số String của bạn (cũng không cho phép case/default cuối cùng kết thúc).

4

Tôi vừa thử mã của bạn. Nó ném một IllegalArgumentException. Cũng giống như tài liệu nói.

+0

Funnily, tôi đã không nhận ra rằng có javadoc cho phương pháp đó. http://java.sun.com/javase/6/docs/api/java/lang/Enum.html#valueOf(java.lang.Class,%20java.lang.String) –

+4

@Jay: Không, đó là phương pháp khác nhau (lưu ý làm thế nào phải mất hai đối số). Phương thức bạn gọi được chỉ định trực tiếp trong Đặc tả Ngôn ngữ Java, cũng đề cập đến IllegalArgumentException: http://java.sun.com/docs/books/jls/third_edition/html/classes.html#302265 – newacct

+0

Tại sao lại là downvote? –

2

phương pháp: valueOf

Returns the enum constant of the specified enum type with the specified name. The name must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.) 

Parameters: 
    enumType - the Class object of the enum type from which to return a constant 
    name - the name of the constant to return 
Returns: 
    the enum constant of the specified enum type with the specified name 
Throws: 
    IllegalArgumentException - if the specified enum type has no constant with the specified name, or **the specified class object does not represent an enum type** 
    NullPointerException - if **enumType or name is null** 

vì vậy nó sẽ cờ những trường hợp ngoại lệ,

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