Java:获取与枚举关联的对象



我有一个充满自定义对象的ArrayList。 我需要将此 ArrayList 保存到捆绑包中,然后稍后检索它。

在可序列化和可包裹都失败后,我现在只是尝试以某种方式保存与 ArrayList 中的索引关联的对象,然后在恢复捆绑包并重新添加对象时检查这些对象。

我拥有的是这样的东西:

保存捆绑包时:

    //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 中的对象的枚举类型。

因此,在恢复捆绑包时,我正在尝试的是这样的:

//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.valueOf(String).

Enemy.valueOf("SPIDER")将返回Enemy.SPIDER,前提是您的枚举看起来像

enum Enemy { SPIDER,  BEE};

编辑:事实证明,Zippy也有一组固定的Enemy对象,每个对象映射到EnemyType的每个值,并且需要一种方法来从给定的EnemyType中找到敌人。我的建议是创建一个

HashMap<EnemyType, Enemy> 

并在创建时将所有对象放入其中,然后在反序列化时使用哈希映射将字符串转换为枚举值,将枚举值转换为 Enemy 对象。

后来我突然想到,根据你在 Enemy 中有多少逻辑,你可能要考虑废弃 Enemy 或 EnemyType 并将它们组合成一个参数化的枚举,类似于这里的 Planet:http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html这将使您不必从字符串到最终对象的两个步骤,并简化一些事情,因为毕竟您不需要任何哈希映射。

最新更新