假设我有一个超类Entity
和一些子类Creature
,Heroes
等。我有JSON文件中子类的所有数据,其中包含代表每个子类的数组,例如文件json/creatures/a.json
代表所有类型为A的Creatures。我正在使用gson解析文件。以下是示例文件的外观:
[
{
"name": "Pikeman",
"attack": 4,
"defence": 5,
// ...
},
{
"name": "Halberdier",
"attack": 6,
"defence": 5,
}
]
现在我想我可以在Entity中创建一个解析给定JSON文件的方法,并使用它解析的数据返回一个Entity子类的实例。如果文件只包含一个实体,我可以执行类似
的操作public static Entity parseFromJson(File file, Class<? extends Entity> c) {
return gson.fromJson(new FileReader(file), c);
}
但现在它变得复杂了:文件包含子类的数组。我应该通过Class<? extends Entity[]>
并返回类型Entity []吗?如果是这样,那么我应该在哪里以及如何访问该数组的单个元素?或者我应该只为每个文件只有一个生物并将名称作为字符串发送?
答案 0 :(得分:2)
你可以尝试
public static <T extends Entity> T parseFromJSON(File file, Class<T> clazz) {
return clazz.cast(gson.FromJson(new FileReader(file), clazz));
}
public static <T extends Entity> T[] parseFromJSONArray(File file, Class<T[]> clazz) {
return clazz.cast(gson.FromJson(new FileReader(file), clazz));
}
你可以使用类似的东西(假设gson
接受它)
Foo foo = parseFromJSON(file, Foo.class);
Foo[] foos = parseFromJSONArray(file, Foo[].class);