2012-01-10 9 views
7

Uso eclipse + Android SDK su ubuntu.Stampa il nome dell'enum

Vorrei stampare il nome di un dispositivo del tipo di sensore, c'è un A LOT OF THEM e voglio farlo automaticamente.

Se uso un

Log.d("SENSORTYPE","Type: " + tempSensor.getType()) 

I stampare il (int) tipo, ma vorrei il nome quale utilizzare l'enum.

Come potrei farlo?

Grazie anticipato.

+1

non è metodo "getName()" funzionante ?? – rajpara

risposta

13

delle enumerazioni, è possibile ottenere una vasta gamma di tutte le costanti e ad anello su di loro molto facilmente utilizzando il codice come questo:

for(YourEnum value: YourEnum.values()){ 
    System.out.println("name="+value.name()); 
} 

Tuttavia, la classe Sensor si collega a non è un enumerazione, ma contiene un elenco di costanti. Non c'è modo di eseguire il ciclo in modo programmatico su quell'elenco come un'enumerazione senza specificare tutti i nomi delle costanti.

Tuttavia, è possibile creare una ricerca statica che mappa gli interi al valore della stringa che si desidera utilizzare, ad esempio

Map<Integer,String> lookup = new HashMap<Integer,String>(); 
lookup.put(TYPE_ACCELEROMETER,"Accelerometer"); 
//Code a put for each TYPE, with the string you want to use as the name 

È possibile utilizzare questo come questo:

Log.d("SENSORTYPE","Type: " + lookup.get(tempSensor.getType())); 

Questo approccio significa che devi ancora scrivere ogni costante e aggiornare la lista se le costanti cambiano, ma devi farlo una sola volta. Sarebbe una buona idea avvolgere la ricerca in una sorta di metodo o classe di supporto, a seconda di quanto ampiamente si desidera riutilizzarlo.

3
Log.d("SENSORNAME", "NAME: " + tempSensor.name()); 
4

è possibile introdurre un metodo abstract e mettere in atto in ogni enumeration

enum Colour { 

Red { 

    @Override 
    String colourName() { 
     return "Red"; 
    } 
}; 

abstract String colourName(); 
} 

In questo modo si dà più flessibilità, ad esempio, se non si desidera visualizzare il nome programmatico

Problemi correlati