Java的新手.
我有一个叫做的类GraphicsObject和一个Bug扩展它的类.
我有一个ArrayList,其中包含所有GraphicsObject:
private ArrayList<GraphicsObject> gc = new ArrayList();
Run Code Online (Sandbox Code Playgroud)
然后我有一个函数可以调用每个名为updateObjects()的帧.
public void updateObjects(){
for(int i = 0; i < gc.size(); i++){
if(gc.get(i).toString().equals("Bug") ){
(Bug)gc.get(i).moveNorth();
}
}
}
Run Code Online (Sandbox Code Playgroud)
类型转换失败并且moveNorth()方法永远不会被识别,因为类GraphicsObject没有那个方法,只有Bug有.
有解决方案吗
gc.get(i)在调用方法之前,必须首先转换实际返回值.必须将强制转换放在括号中的原因是java中的类型转换操作符的优先级低于方法调用.
((Bug)gc.get(i)).moveNorth();
Run Code Online (Sandbox Code Playgroud)
有几种方法可以解决它:
在这种情况下最合适的是
for(int i = 0; i < gc.size(); i++){
if( gc.get(i) instanceof Bug ){
((Bug)(gc.get(i)).moveNorth();
}
}
Run Code Online (Sandbox Code Playgroud)
或者,您可以添加一个方法graphicsObject并使Bug覆盖它
abstract public void defaultAction();
Run Code Online (Sandbox Code Playgroud)
并在Bug中
@Override
public void defaultAction() {
moveNorth();
}
Run Code Online (Sandbox Code Playgroud)
然后在你的渲染器中:
for(GraphicsObject go : gc){
go.defaultAction();
}
Run Code Online (Sandbox Code Playgroud)