2012-01-10 30 views
7

Tôi đang sử dụng nhật thực + SDK Android trên ubuntu.In tên của enum

Tôi muốn in tên thiết bị loại cảm biến, tại đây có A LOT OF THEM và tôi muốn tự động làm điều đó.

Nếu tôi sử dụng một

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

tôi in (int) loại, nhưng tôi muốn tên người sử dụng enum.

Tôi có thể làm điều đó bằng cách nào?

Thận trước.

+1

không phải là "getName()" phương pháp làm việc ?? – rajpara

Trả lời

13

Đối với kiểu liệt kê, bạn có thể có được một mảng của tất cả các hằng số và vòng qua chúng rất dễ dàng sử dụng mã như thế này:

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

Tuy nhiên, lớp Sensor bạn liên kết đến không phải là một liệt kê, nhưng chứa một danh sách các hằng số. Không có cách nào để lập trình vòng lặp trên danh sách đó như một liệt kê mà không chỉ rõ tất cả các tên hằng số.

Tuy nhiên, bạn có thể tạo một tra cứu tĩnh mà các bản đồ các ints để String giá trị mà bạn muốn sử dụng, ví dụ

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 

Bạn có thể sử dụng như thế này:

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

Cách tiếp cận này có nghĩa là bạn vẫn phải viết ra từng hằng số và cập nhật danh sách nếu các hằng số thay đổi, nhưng bạn chỉ phải thực hiện nó một lần. Nó sẽ là một ý tưởng tốt để bọc tra cứu trong một số loại phương pháp trợ giúp hoặc lớp tùy thuộc vào cách rộng rãi bạn muốn tái sử dụng nó.

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

bạn có thể giới thiệu một phương pháp abstract và thực hiện nó trong mọi enumeration

enum Colour { 

Red { 

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

abstract String colourName(); 
} 

Bằng cách này giúp bạn linh hoạt hơn, ví dụ, nếu bạn không muốn hiển thị tên chương trình của nó

Các vấn đề liên quan