【发布时间】:2011-10-23 16:34:11
【问题描述】:
假设我有一个超类 Entity 和一些子类 Creature、Heroes 等。我在 JSON 文件中有所有子类的数据,其中包含代表每个子类的数组,例如文件 json/creatures/a.json 代表所有 A 类型的生物。我正在使用 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[] 吗?如果是这样,那么我应该在哪里以及如何访问该数组的单个元素?还是我应该每个文件只有一个生物并将名称作为字符串发送?
【问题讨论】:
-
请注意:在您的示例
parseFromJson中,参数c已经 是Class对象,因此您可能不想做@987654332 @,从那时起,您一定会得到Class.class。 -
现已编辑。我猜演员阵容也不需要?
-
是的。检查the javadoc for
gson.fromJson(),它返回类型T,所以不需要强制转换。