Я пытаюсь заменить какой-то старый код более общим подходом, поэтому я попытался использовать generics. К сожалению, до сих пор я не работал. Я должен динамически загружать хэш-карту объектов из строки json. Но до сих пор я не работал, поскольку строка 4Общая десериализация
HashMap<String,c> hm = new HashMap<String,c>();
говорит «Неизвестный класс c». Что я делаю не так?
public static HashMap<String,?> getEntries(Context context, Type t)
{
Class c = t.getClass();
HashMap<String,c> hm = new HashMap<String,c>();
try
{
File fl = new File(context.getCacheDir(),c.getClass().toString() + ".json");
FileInputStream fin = new FileInputStream(fl);
BufferedReader reader = new BufferedReader(new InputStreamReader(fin));
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line).append("\n");
}
fin.close();
hm = new Gson().fromJson(sb.toString(), t);
}catch(Exception i)
{
}
return hm;
}
Это не будет делать то, что вы ожидаете от этого. Аргумент типа должен быть именем типа. 'c' - переменная. –
'c.getClass(). ToString()' должен btw оценивать '' класс java.lang.Class '' каждый раз. c уже является объектом класса, а 'c.toString()' будет печатать это уже, это класс, и каждый последующий класс будет просто печатать то же самое. – zapl
Хороший улов, @zapl. Лукас: 'c.getSimpleName()', вероятно, больше того, что вы собираетесь с этим битом. –