Java: 获取与枚举关联的对象
Java: Getting object associated with enum
我有一个充满自定义对象的 ArrayList。我需要将这个 ArrayList 保存到一个 Bundle 中,稍后再检索它。
在 Serializable 和 Parcelable 都失败后,我现在只是尝试以某种方式保存与 ArrayList 中的索引关联的对象,然后在恢复 Bundle 时检查这些对象并将对象添加回。
我的是这样的:
保存捆绑包时:
//Create temporary array of the same length as my ArrayList
String [] tempStringArray = new String[myList.size()];
//Convert the enum to a string and save it in the temporary array
for (int i = 0; i<myList.size();i++){
tempStringArray [i] = myList.get(i).getType(); //returns the enum in string form
}
//Write this to the Bundle
bundle.putStringArray("List", tempStringArray);
所以我现在有一个字符串数组,表示最初在 ArrayList 中的对象的枚举类型。
所以,在恢复 Bundle 时,我正在尝试的是这样的:
//Temporary string array
String[] tempStringArray = savedState.getStringArray("List");
//Temporary enum array
ObjectType[] tempEnumArray = new ObjectType[tempStringArray.length];
for (int i = 0; i<tempStringArray.length;i++){
tempEnumArray[i]=ObjectType.valueOf(tempEnemies[i]);
}
所以,现在我有了最初在 ArrayList 中的每个项目的枚举类型。
我现在想做的是(将进入上面的 for 循环):
myList.add(tempEnumArray[i].ObjectTypeThisEnumRefersTo());
显然上面的 "ObjectTypeThisEnumRefersTo()" 方法不存在,但这最终是我想要找出的。这是可能的还是有其他方法可以做到这一点?
要从字符串中获取枚举类型 Enemy 的枚举值,请使用
Enemy.valueOf(String).
Enemy.valueOf("SPIDER") 会 return Enemy.SPIDER,前提是你的枚举看起来像
enum Enemy { SPIDER, BEE};
编辑:原来 Zippy 也有一组固定的 Enemy 对象,每个都映射到 EnemyType 的每个值,并且需要一种方法从给定的 EnemyType 中找到 Enemy。我的建议是创建一个
HashMap<EnemyType, Enemy>
并在创建时将所有对象放入其中,然后在反序列化时使用 hashmap 将字符串转换为枚举值并将枚举值转换为 Enemy 对象。
我后来想到,根据你在 Enemy 中有多少逻辑,你可能想考虑放弃 Enemy 或 EnemyType 并将它们组合成一个参数化的枚举,类似于这里的 Planet 示例:http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html
这将使您不必从字符串到最终对象执行两个步骤,并且可以简化一些事情,因为毕竟您不需要任何哈希图。
我有一个充满自定义对象的 ArrayList。我需要将这个 ArrayList 保存到一个 Bundle 中,稍后再检索它。
在 Serializable 和 Parcelable 都失败后,我现在只是尝试以某种方式保存与 ArrayList 中的索引关联的对象,然后在恢复 Bundle 时检查这些对象并将对象添加回。
我的是这样的:
保存捆绑包时:
//Create temporary array of the same length as my ArrayList
String [] tempStringArray = new String[myList.size()];
//Convert the enum to a string and save it in the temporary array
for (int i = 0; i<myList.size();i++){
tempStringArray [i] = myList.get(i).getType(); //returns the enum in string form
}
//Write this to the Bundle
bundle.putStringArray("List", tempStringArray);
所以我现在有一个字符串数组,表示最初在 ArrayList 中的对象的枚举类型。
所以,在恢复 Bundle 时,我正在尝试的是这样的:
//Temporary string array
String[] tempStringArray = savedState.getStringArray("List");
//Temporary enum array
ObjectType[] tempEnumArray = new ObjectType[tempStringArray.length];
for (int i = 0; i<tempStringArray.length;i++){
tempEnumArray[i]=ObjectType.valueOf(tempEnemies[i]);
}
所以,现在我有了最初在 ArrayList 中的每个项目的枚举类型。
我现在想做的是(将进入上面的 for 循环):
myList.add(tempEnumArray[i].ObjectTypeThisEnumRefersTo());
显然上面的 "ObjectTypeThisEnumRefersTo()" 方法不存在,但这最终是我想要找出的。这是可能的还是有其他方法可以做到这一点?
要从字符串中获取枚举类型 Enemy 的枚举值,请使用
Enemy.valueOf(String).
Enemy.valueOf("SPIDER") 会 return Enemy.SPIDER,前提是你的枚举看起来像
enum Enemy { SPIDER, BEE};
编辑:原来 Zippy 也有一组固定的 Enemy 对象,每个都映射到 EnemyType 的每个值,并且需要一种方法从给定的 EnemyType 中找到 Enemy。我的建议是创建一个
HashMap<EnemyType, Enemy>
并在创建时将所有对象放入其中,然后在反序列化时使用 hashmap 将字符串转换为枚举值并将枚举值转换为 Enemy 对象。
我后来想到,根据你在 Enemy 中有多少逻辑,你可能想考虑放弃 Enemy 或 EnemyType 并将它们组合成一个参数化的枚举,类似于这里的 Planet 示例:http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html 这将使您不必从字符串到最终对象执行两个步骤,并且可以简化一些事情,因为毕竟您不需要任何哈希图。