2012-03-15 24 views
7

Tôi phải chọn từ nhiều loại thể loại cho sách và tôi đã suy nghĩ sử dụng enums cho điều này, nhưng có một số thể loại được sáng tác bởi hai hoặc nhiều từ như "Medical, Health & Fitness", "Art & Photography", "Science Viễn tưởng ", v.v.Có thể có một lớp enum với enums của hai hoặc nhiều từ?

public enum Genero { 
    Action, Comedy, Drama, Computers, Novel, Science Fiction 
} 

Nhưng tôi gặp lỗi cú pháp cho" Khoa học viễn tưởng ". Tôi đã thử đặt nó với dấu ngoặc kép và các câu châm ngôn đơn giản, nhưng không hiệu quả. Enum này sẽ được sử dụng như một thuộc tính cho lớp Book.

Trả lời

14

Không, không thể. Tên enum phải là valid Java identifiers - điều đó có nghĩa là không có dấu cách. Quy ước thông thường là khai báo tên enum trong tất cả các ký tự viết hoa và các từ riêng biệt sử dụng dấu gạch dưới, như sau:

public enum Genero { 
    ACTION, COMEDY, DRAMA, COMPUTERS, NOVEL, SCIENCE_FICTION 
} 
+0

Vì emums được xử lý nội bộ, tôi nghĩ rằng một chỉ sẽ sử dụng một gạch dưới –

+0

Đó là tất cả các quyền! –

5

Không thể thực hiện được. Tuy nhiên, có thể sử dụng dấu gạch dưới (Science_Fiction) trong tên. Bạn cũng có thể ghi đè lên các phương pháp toString trở lại bất cứ điều gì bạn muốn nó (kể từ khi nó xuất hiện bạn đang cho một tên con người có thể đọc được cho enums của bạn):

public enum Genero { 
    ACTION("Action"), COMEDY("Comedy"), DRAMA("Drama"), COMPUTERS("Computers"), NOVEL("Novel"), SCIENCE_FICTION("Science Fiction"); 

    private final String toString; 

    private Genero(String toString) { 
     this.toString = toString; 
    } 

    public String toString(){ 
     return toString; 
    } 
} 
+0

Điều đó sẽ không biên dịch. –

+0

@ TomHawtin-tackline Rất tiếc, đã được khắc phục ngay bây giờ. – Jeffrey

+0

Tôi chỉ muốn gán cho Giới tính của một thuộc tính Giới tính. Giống như: 'Giới tính = Genero.ACTION' Tôi không thấy nơi tôi có thể sử dụng constructor hoặc phương pháp toString: S –

0

Đây có thể là những gì bạn muốn:

static private enum EnumExample { 
    R("Sample emun with spaces"), 
    G("Science Fiction"); 
    final private String value; 
    EnumExample(String s) { 
    value = s; 
    } 
} 

System.out.println(EnumExample.G.value); 
System.out.println(EnumExample.valueOf("G").value); 

Science Fiction 
Science Fiction 
+0

Tôi muốn tạo trường đó 'final' và' private'. –

+0

@ TomHawtin-tackline Bạn có nghĩa là "giá trị chuỗi riêng tư cuối cùng" hay không? – Java42

+0

Có. Hiện tại bạn có thể viết 'EnumExample.G.value =" Comedy ";'. –

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