2013-04-25 147 views
-1

这段代码有什么问题? 考虑建立一个ArrayList包含了所有的建筑和 大厦是农场和StoneMine超:铸造类型在java中的方法

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)是农场类的一个实例, 我得到一个运行时间错误

+5

这不会编译,是吗? – dasblinkenlight 2013-04-25 12:42:26

+0

什么是运行时错误? – 2013-04-25 12:42:27

+0

欢迎来到StackExchange。 “建筑物”是如何申报的? – rajah9 2013-04-25 12:43:57

回答

1

returnBuilding返回一个Building,而不是Farm。在返回之前铸造game.buildings.get(i)不会改变这一点。

如果运行时类的game.buildings.get(i)Farm,投returnBuilding返回值Farm调用SOMEMETHODEJUSTINFARMCLASS方法之前。