Java: получение объекта, связанного с 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]);
}

Итак, теперь у меня есть тип enum для каждого элемента, который изначально был в ArrayList.

То, что я сейчас пытаюсь сделать сейчас, это что-то вроде (будет идти внутри цикла for выше):

myList.add(tempEnumArray[i].ObjectTypeThisEnumRefersTo());

Очевидно, что описанный выше метод "ObjectTypeThisEnumRefersTo()" не существует, но в конечном итоге я пытаюсь это выяснить. Это возможно или, возможно, есть какой-то другой способ сделать это?

1 ответ

Решение

Чтобы получить значение enum типа enum типа enum из строки, используйте

Enemy.valueOf(String).

Enemy.valueOf("SPIDER") вернет Enemy.SPIDER, если ваш enum выглядит

enum Enemy { SPIDER,  BEE};

РЕДАКТИРОВАТЬ: Оказывается, Zippy также имел фиксированный набор объектов Enemy, каждый из которых сопоставлен с каждым значением EnemyType, и ему нужен был способ найти Enemy из данного EnemyType. Мое предложение состоит в том, чтобы создать

HashMap<EnemyType, Enemy> 

и поместите все объекты туда при создании, затем при десериализации преобразуйте строки в перечисляемые значения и перечислите значения в объекты Enemy, используя hashmap.

Позже мне пришло в голову, что, в зависимости от того, сколько логики у вас в Enemy, вы можете рассмотреть возможность удаления Enemy или EnemyType и объединить их в одно параметризованное перечисление, аналогично примеру с Planet здесь: http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html Это избавит вас от необходимости делать два шага от строки до конечного объекта и немного упростит вещи, так как вам не понадобится хэш-карта.

Другие вопросы по тегам