Ответ 1
Я бы сделал это через размышления, если бы я сделал это вообще. Храните статическую карту таким образом, чтобы String.class отображался в SharedPreference.putString() и т.д. Затем, когда вы перебираете элементы, проверяйте их класс на карте. Если этого не существует, проверьте суперкласс и т.д. Это либо даст вам надлежащий метод для вызова, либо сообщит вам, что запрошенный тип объекта не является тем, что может быть помещено в предпочтения.
Итак, основной алгоритм:
- Получить объект из пакета
- Получить класс
- Посмотрите, находится ли класс на карте
- Если это так, вызовите указанный метод, чтобы поместить его в SharedPreferences
- Если это не так, получите суперкласс и вернитесь к шагу 3.
- Если вы дойдете до java.lang.Object, у вас есть связанный объект, который не может быть немедленно сохранен в SharedPreferences. В зависимости от того, какие классы вы попали по пути, который вы, возможно, захотите попытаться обработать, или просто захотите записать ошибку и перейти дальше. Не зная, почему вы это делаете, невозможно угадать, как вы должны реагировать, когда метод терпит неудачу. Это неизменно будет, если у вас нет полного контроля над пакетом и предпочтениями, но если у вас есть такой контроль, вам не нужно перепрыгивать через все эти обручи, потому что вы можете быть гораздо более простыми и просто определить свои собственные ключи.
Примечание: отражение не быстрое, и это не самая простая вещь для кодирования и поддержки. Если это вообще возможно, я бы рекомендовал найти более общий метод, подходящий для вашего прецедента.