2011-01-08 32 views
15

Tôi có lớp sau đây:Sử dụng enums trong Java trên nhiều lớp

public class Card 
{ 
    public enum Suit 
    { 
     SPACES, HEARTS, DIAMONDS, CLUBS 
    }; 

    public Card(Suit nsuit, int nrank) 
    { 
     suit = nsuit; 
     rank = nrank; 
    } 

    private Suit suit; 
    private int rank; 
} 

Tôi muốn nhanh chóng nó trong lớp khác, nhưng lớp học mà không hiểu được Suit enum. Tôi nên đặt enum vào đâu để hiển thị công khai?

+2

BTW, lệnh ';' sau Suit của bạn decl là không cần thiết. –

Trả lời

18

Đặt Suit trong lớp học riêng của mình:

Suit.java:

public enum Suit 
{ 
    SPACES, HEARTS, DIAMONDS, CLUBS 
} 
+0

Cảm ơn. Tôi đã nghĩ về điều đó nhưng tôi nghĩ rằng tất cả các lớp đều cần từ khóa lớp. – Igor

+0

@Richard - Vâng, thật ngạc nhiên khi lần đầu tiên tôi nhìn thấy nó. –

+6

Điều này giải quyết được vấn đề, nhưng tôi không nghĩ đó là giải pháp tốt nhất. Enum Suit thuộc về lớp Card, vì bạn sẽ luôn sử dụng chúng cùng nhau. Lỗi – Jorn

6

Các enum là đã nhìn thấy được.

Card card = new Card(Card.Suit.CLUBS, 5); 

sẽ khởi tạo thẻ mới.

Không liên quan ... nhưng bạn có thể muốn biến bộ đồ Spaces thành phù hợp với Spades. :)

27

Các Suit enum là bên trong lớp Card, và bạn phải truy cập vào nó như vậy:

new Card(Card.Suit.SPADES, 1); 

Hoặc bạn có thể nhập khẩu các lớp Suit từ bên trong thẻ, và truy cập trực tiếp:

import my.package.Card.Suit; 
new Card(Suit.SPADES, 1); 

Tùy chọn khác là đặt Suit vào lớp riêng của mình, theo đề xuất của Bert.

-4

Các Suit enum là bên trong lớp Card, và bạn phải truy cập vào nó như vậy:

Card.Suit suit = Card.Suit.CLUBS; 
+0

: loại không mong muốn bắt buộc: lớp học, gói được tìm thấy: biến – msysmilu

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