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

时间:2015-03-13 20:47:34

标签: java android enums bundle value-of

我有一个充满自定义对象的ArrayList。我需要将这个ArrayList保存到Bundle中,然后再检索它。

使用Serializable和Parcelable都失败了,我现在只是试图以某种方式保存与ArrayList中的索引相关联的对象,然后在恢复Bundle并重新添加对象时检查这些对象。

我所拥有的是这样的:

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

显然&#34; ObjectTypeThisEnumRefersTo()&#34;上面的方法并不存在,但这最终是我试图找出的。这是可能的,还是有其他方法可以做到这一点?

1 个答案:

答案 0 :(得分:1)

要从字符串中获取枚举类型Enemy的枚举值,请使用

Enemy.valueOf(String).

Enemy.valueOf(&#34; SPIDER&#34;)会返回Enemy.SPIDER,只要你的枚举看起来像

enum Enemy { SPIDER,  BEE};

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

HashMap<EnemyType, Enemy> 

并在创建时将所有对象放在那里,然后在反序列化时使用hashmap将字符串转换为枚举值和枚举值到Enemy对象。

后来我发现,根据你在Enemy中有多少逻辑,你可能想要考虑废弃Enemy或EnemyType并将它们组合成一个参数化的枚举,类似于Planet在这里的例子:{{3 }} 这样就可以避免从字符串到最终对象的两个步骤,并简化一些事情,因为毕竟你不需要任何hashmap。