如何将参数从外部传递到接口的实现

时间:2014-11-12 20:10:58

标签: java android generics parameters interface

我创建了一个通用数据结构并实现了一个自定义迭代器, 迭代器接收一个具有函数的接口,数据结构中的每个对象都从对象的接口发送到函数。

我是这样做的:

界面:

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,但它会在运行时抛出并出错。

我怎样才能克服这个?

1 个答案:

答案 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);
}