我创建了一个通用数据结构并实现了一个自定义迭代器, 迭代器接收一个具有函数的接口,数据结构中的每个对象都从对象的接口发送到函数。
我是这样做的:
界面:
public interface QTreeAction<T> {
void actToDo(T Param);
}
迭代器:
public void Iterate(QNode qNode, QTreeAction<T> action)
{
if (qNode == null)
return;
for (int j = 0; j < qNode.objList.size(); j++)
{
action.actToDo(qNode.objList.get(j).Object);
}
for (int i = 0; i < 4; i++)
{
this.Iterate(qNode.Nodes.get(i), action);
}
}
电话:
public void Render(float fDelta, Canvas g) {
g.drawRGB(255, 255, 10);
g.setMatrix(this.gameMatrix);
ohHandler.render(new QTreeAction<Tile>() {
@Override
public void actToDo(Tile Param) {
Param.render(fDelta, g);
}
});
this.pPlayer.render(fDelta, g);
}
(ohHandler有节点并调用迭代器)
渲染功能:
public void render(float fDelta, Canvas g) {
g.drawBitmap(StaticDataHolder.GameTextures.blocks[ttType.getValue()],
this.vecTilePosition.getX(), this.vecTilePosition.getY(), null);
}
正如您所见,Param.render需要2个函数提供的参数,但是在这种情况下会出现错误并且它要求我将params作为final,但它会在运行时抛出并出错。
我怎样才能克服这个?
答案 0 :(得分:0)
在这种情况下,您只能在匿名类中引用最终变量。
这应该可以解决问题:
public void Render(float fDelta, Canvas g) {
final Cavas gFinal = g;
final float fDeltaFinal = fDelta;
ohHandler.render(new QTreeAction<Tile>() {
@Override
public void actToDo(Tile Param) {
Param.render(fDeltaFinal , gFinal);
}
});
this.pPlayer.render(fDelta, g);
}