在java中的方法中转换类型

时间:2013-04-25 12:40:35

标签: java casting

这段代码有什么问题? 考虑构建一个包含所有建筑物的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类的实例, 我得到一个运行时错误

1 个答案:

答案 0 :(得分:1)

returnBuilding会返回Building,而非Farm。在返回之前强制转换game.buildings.get(i)不会改变它。

如果game.buildings.get(i)的运行时类为Farm,请在调用returnBuilding方法之前将Farm的返回值强制转换为SOMEMETHODEJUSTINFARMCLASS