这段代码有什么问题? 考虑构建一个包含所有建筑物的ArrayList 建筑是Farm和StoneMine的超级课程:
public Building returnBuilding(int i)
{
if(buildings.get(i) instanceof Farm)
return (Farm)buildings.get(i);
if(buildings.get(i) instanceof StoneMine)
return (StoneMine)buildings.get(i);
else
return null;
}
然后如果我打电话
returnBuilding(1).SOMEMETHODEJUSTINFARMCLASS();
其中building.get(1)
是Farm类的实例,
我得到一个运行时错误
答案 0 :(得分:1)
returnBuilding
会返回Building
,而非Farm
。在返回之前强制转换game.buildings.get(i)
不会改变它。
如果game.buildings.get(i)
的运行时类为Farm
,请在调用returnBuilding
方法之前将Farm
的返回值强制转换为SOMEMETHODEJUSTINFARMCLASS
。