gpt4 book ai didi

搜索 ArrayList 时发生 Java JSON ClassCastException

转载 作者:行者123 更新时间:2023-11-30 05:21:28 25 4
gpt4 key购买 nike

我的程序解析一个 JSONArray,其中包含作为飞行员的 JSONObejct 列表。然后,它迭代并创建一个 Pilot 的新实例(继承自 Crew 父类(super class)),并将其添加到名为 loadCrew 的 Crew 类型的 ArrayList 中(它的类型为船员,因为机组人员也将添加到列表中)。

如下:

    JSONObject crew = new JSONObject(json); //Create a new JSONObject called root from the json file stored in 'json'
JSONArray allPilots = crew.getJSONArray("pilots");
JSONArray allCabinCrew = crew.getJSONArray("cabincrew");


for (int i = 0; i < allPilots.length(); i++) {
Pilot a = new Pilot();
JSONObject pilot = allPilots.getJSONObject(i);
JSONArray typeRatings = pilot.getJSONArray("typeRatings");

a.setForename(pilot.getString("forename"));
a.setSurname(pilot.getString("surname"));
a.setHomeBase(pilot.getString("homebase"));
a.setRank(Pilot.Rank.valueOf(pilot.getString("rank")));
for(int i1=0; i1 < typeRatings.length(); i1++)
{
a.setQualifiedFor(typeRatings.getString(i1));
}
loadedCrew.add(a);
}

当一个单独的方法在 loadCrew 列表中找到与条件匹配的对象时,它应该返回一个名为 PilotOutput 的 Pilot (List) 类型的输出列表。如下:

public List<Pilot> findPilotsByTypeRating(String typeCode) {
// TODO Auto-generated method stub
pilotOutput.clear();


for(Crew a : loadedCrew)
{
if (a instanceof Pilot && a.getTypeRatings().contains(typeCode));
{
pilotOutput.add((Pilot)a);
}

}
return pilotOutput;
}

但我收到以下错误:

...threw an exception: java.lang.ClassCastException: class baseclasses.CabinCrew cannot be cast to class baseclasses.Pilot

我无法理解为什么会发生这种情况,因为不仅该对象已经是 Pilot 类型,而且当我将它分配给输出列表时,我什至将 Pilot 转换为它。我知道该方法并没有尝试将任何 CabinCrew 添加到列表中,因为我已使用 System.out.print(a) 来确保它只获取飞行员对象。

有什么想法吗?谢谢。

最佳答案

删除 if 行末尾的分号。应该是这样的:

  if (a instanceof Pilot && a.getTypeRatings().contains(typeCode))
pilotOutput.add((Pilot) a);

关于搜索 ArrayList 时发生 Java JSON ClassCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59520683/

25 4 0