2012-01-10 121 views
7

我在ubuntu上使用eclipse + Android SDK。打印枚舉的名稱

我想打印傳感器類型設備的名稱,有一個A LOT OF THEM,我想自動執行。

如果我使用一個

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

我打印(INT)的類型,但我想誰用枚舉的名稱。

我該怎麼做?

Thants提前。

+1

不「getName()」方法工作? – rajpara 2012-01-10 10:33:17

回答

13

對於枚舉,可以非常方便的使用代碼獲得所有的常量數組和循環遍歷它們像這樣:

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

然而,Sensor類,你鏈接到不是枚舉,但包含一個常量列表。沒有辦法像枚舉一樣通過編程方式遍歷該列表而不指定所有常量名稱。

但是,您可以創建一個在整數你要使用的字符串值映射一個靜態查找,例如

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())); 

這種方法這意味着你仍然必須寫出每個常量,並在常量改變時更新列表,但是你只需要做一次。根據你想要重用它的程度,將查找包裝在某種輔助方法或類中是個不錯的主意。

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

您可以引入一個abstract方法並執行它在每一個enumeration

enum Colour { 

Red { 

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

abstract String colourName(); 
} 

這樣,給你更多的靈活性,例如,如果你不想要顯示它的編程名稱