Печать имени enum - PullRequest
       8

Печать имени enum

8 голосов
/ 10 января 2012

Я использую eclipse + Android SDK в Ubuntu.

Я хотел бы напечатать название устройства сенсорного типа, там МНОГО , и я хочу сделать это автоматически.

Если я использую

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

Я печатаю тип (int), но мне хотелось бы имя, которое использует перечисление.

Как я могу это сделать?

Заранее спасибо.

Ответы [ 3 ]

13 голосов
/ 10 января 2012

Для перечислений вы можете получить массив всех констант и очень легко зациклить их, используя такой код:

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

Однако класс Sensor , на который вы ссылаетесьне перечисление, но содержит список констант.Невозможно программно зациклить этот список, как перечисление, без указания всех имен констант.

Однако вы можете создать статический поиск, который сопоставит целые числа со значением String, которое вы хотите использовать, например

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

Вы можете использовать это так:

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

Этот подход означает, что вам все равно придется записывать каждую константу и обновлять список, если константы меняются, но вам нужно только сделатьэто один раз.Было бы неплохо обернуть поиск в какой-нибудь вспомогательный метод или класс в зависимости от того, насколько широко вы хотите использовать его повторно.

4 голосов
/ 10 января 2012

вы можете ввести метод abstract и реализовать его в каждом enumeration

enum Colour {

Red {

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

abstract String colourName();
}

Этот способ дает вам большую гибкость, например, если вы не хотите отображать его программное имя

3 голосов
/ 10 января 2012
Log.d("SENSORNAME", "NAME: " + tempSensor.name());
...