Hep*_*tus 4 java enums android
我想将java枚举序列化/反序列化为int.我正在使用Android Wear可穿戴数据层API在Wear和Phone设备之间传输枚举设置.这意味着我需要将我的枚举转换为int并以编程方式返回枚举.请注意,我不需要创建新的枚举,只匹配现有的枚举.我担心的是,尽管我可以使用枚举方法轻松设置值,但似乎我可以轻松设置不存在的值.
public enum Color {
Undefined (0), Red(1), Yellow(2), Blue(3), Green(4), Black(5);
private int mValue;
private Color(int value) { this.mValue = value;} // Constructor
public int id(){return mValue;} // Return enum index
public void setValue(int i){mValue = i;}; // Set index
}
Run Code Online (Sandbox Code Playgroud)
因此,我可以做到以下几点:
Color color = Color.Red;
int index = color.id();
putDataMapReq.getDataMap().putInt("color",index);
Run Code Online (Sandbox Code Playgroud)
这个值可以作为int传输,我想重新构建如下,但我不能让setValue()方法可访问:
int newindex = dataMap.getInt ("color");
Color newColor = Color.Undefined;
newColor.setValue(newIndex);
Run Code Online (Sandbox Code Playgroud)
这是正确的方法吗?有没有办法验证新索引值是否合法?
我建议您使用emen的方法name并valueof简化.
你Color会是这样的:
public enum Color {
Undefined , Red, Yellow, Blue, Green, Black;
}
Run Code Online (Sandbox Code Playgroud)
连载:
Color color = Color.Red;
String name = color.name();
Run Code Online (Sandbox Code Playgroud)
反序列化:
String newName = dataMap.getString("color");
Color newColor = Color.valueOf(newName);
Run Code Online (Sandbox Code Playgroud)
UPDATE
如果你想使用整数,你的代码将如下所示:
public enum Color {
Undefined (0), Red(1), Yellow(2), Blue(3), Green(4), Black(5);
private int mValue;
Color(int value) { this.mValue = value;} // Constructor
public int id(){return mValue;} // Return enum index
public static Color fromId(int value) {
for(Color color : values()) {
if (color.mValue == value) {
return color;
}
}
return Undefined;
}
}
Run Code Online (Sandbox Code Playgroud)
连载:
Color color = Color.Red;
int index = color.id();
Run Code Online (Sandbox Code Playgroud)
反序列化:
int newIndex = dataMap.getInt("color");
Color newColor = Color.fromId(newIndex);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5336 次 |
| 最近记录: |