我有4个不同的散列表,它们的值有不同的类类型。
(散列表〈字符串,类1〉,散列表〈字符串,类2〉,散列表〈字符串,类3〉,散列表〈字符串,类4〉)
每个类在resources文件夹中都有各自的目录,其中包含一组Json文件。我希望将目录中的所有Json文件反序列化为正确的类类型,并将它们存储在作为参数输入的HashMap中。
Gson需要一个类类型的输入,我在这里写了#OBJECTCLASS#来创建一个对象。我怎样才能从作为方法参数输入的HashMap中获得这个输入呢?
//load a hashmap with the objects saved in its resource file
public static void loadObjsFromDirectory(HashMap<String, Object> map, String directoryPath) {
File[] files = new File(directoryPath).listFiles();
//null safety
if (files == null) {
System.out.println(filePath + " is empty");
return;
}
Gson gsonDeserializer = new Gson();
//deserialize each json file and put the created object in its map
for (File file : files) {
//make sure the Json file is parsed correctly
try {
Object object = gsonDeserializer.fromJson(String.valueOf(file), #OBJECTCLASS#);
map.put(file.getName(), object);
System.out.println(file.getName() + " is loaded");
} catch (JsonParseException e){
System.out.println(file.getName() + "is incorrectly parsed");
}
}
}
例如:
public static void main(String[] args) throws Exception {
HashMap<String, Class1> map1 = new HashMap<>();
HashMap<String, Class2> map2 = new HashMap<>();
Utils.loadObjsFromDirectory(map1, "directoryPath1");
Utils.loadObjsFromDirectory(map2, "directoryPath2");
}
应将directoryPath1中的所有文件创建为Class1对象,并将directoryPath2中的所有文件创建为Class2对象。
1条答案
按热度按时间jgwigjjp1#
您可以参数化并模拟Gson方法,并传入
Class
参数:ExpectedType
是仅适用于方法声明的类型参数。它不是在代码中任何位置定义的类。呼叫程式码(main方法)会变成: