2010-09-03 3 views
2

Existe-t-il une meilleure pratique pour les énumérations dans Java? Par exemple, je donne les résultats suivants:Options/enums dans java?

class Foo { 

    public static final int OPTION_1 = 'a'; 
    public static final int OPTION_2 = 'b'; 

    public void doSomething(String name, int option) { 
     ... 
    } 
} 

void test() { 
    Foo foo = new Foo(); 
    foo.doSomething("blah", Foo.OPTION_2); 
} 

afin que l'utilisateur peut choisir d'utiliser l'un des ints statiques définis dans Foo, mais ils pourraient aussi fournir tout entier qu'ils veulent, il n'y a pas de compilation de vérifier sur elle . Y a-t-il un moyen de contourner cela dans Java, une autre façon de faire cela pour empêcher le développeur final de choisir uniquement parmi les types d'options définis?

Merci

Répondre

6
class Foo { 
    public enum Option{First, Second} 
    public void doSomething(String name, Option option) { 
     ... 
    } 
} 

void test() { 
    Foo foo = new Foo(); 
    foo.dosomething("blah", Foo.Option.Second); 
} 
+0

Oh Non, je suis ouvert à ça, cette solution fonctionne bien. – user246114

1

Il existe plusieurs types de ENUM en Java (as of J2SE 5.0). Read the tutorial.

public enum Option{ 
    OPTION_1, OPTION_2 //All caps by convention 
} 

class Foo { 

    public void dosomething(String name, Option option) { 
     ... 
    } 
} 

void test() { 
    Foo foo = new Foo(); 
    foo.dosomething("blah", Option.OPTION_2); 
} 
5

Depuis Java 1.5, il est le mot-clé enum qui fait énumérations Typesafe

Votre code ressemblerait à ceci alors:

class Foo { 

    public enum Option = { OPTION_1, OPTION_2 }; 

    public void doSomething(String name, Option option) { 
     ... 
    } 
} 

void test() { 
    Foo foo = new Foo(); 
    foo.doSomething("blah", Foo.Option.OPTION_2); 
} 

Ceci est entièrement pris en charge par le système de type de sorte que le compilateur va forcer l'utilisateur à ne pas devenir créatif lors du passage des options.

Vous pouvez en lire plus here

0

Cela vous permettra de définir la valeur de l'ENUM

enum Option{ 
    ONE('a'); 
    TWO('b'); 

    private Option(int x){ 
     value = x; 
    } 

    private int value; 
} 

class Foo { 
    public void doSomething(String name, Option option) { 
     ... 
    } 
} 

void test() { 
    Foo foo = new Foo(); 
    foo.dosomething("blah", Option.ONE); 
}