2011-01-08 5 views
15

que tienen la siguiente clase:Uso de las enumeraciones en Java a través de múltiples clases

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; 
} 

Quiero crear una instancia de otra clase, pero esa clase no comprende la enumeración Suit. ¿Dónde debería poner la enumeración para que sea públicamente visible?

+2

Por cierto, el '; 'después de su traje decl es innecesaria. –

Respuesta

18

Poner el juego en su propia clase:

Suit.java:

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

Gracias. He estado pensando en eso, pero pensé que todas las clases necesitaban la palabra clave class. – Igor

+0

@Richard - Sí, fue sorprendente para mí la primera vez que lo vi. –

+6

Esto resuelve el problema, pero no creo que sea la mejor solución. El Suit enum pertenece a la clase de la Tarjeta, ya que siempre los usará juntos. – Jorn

6

La enumeración es ya visible.

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

creará una nueva tarjeta.

No relacionado ... pero es posible que desee hacer el traje de Spaces en el juego de espadas. :)

27

El traje de enumeración que está dentro de la clase de tarjeta, y hay que acceder a él de esa manera:

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

O bien, puede importar la clase Traje de dentro de la tarjeta, y acceder a ella directamente:

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

La otra opción es poner Suit en su propia clase, como lo sugiere Bert.

-4

El Suit enumeración que está dentro de la clase Card, y hay que acceder a él de esa manera:

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

error: tipo inesperado requerido: clase, paquete encontrado: variable – msysmilu

Cuestiones relacionadas