java中的匿名函数

时间:2012-12-25 04:03:11

标签: java anonymous-function

我有一个名为LinkGroup的类,它包含一些游戏对象。我调用Rotate为这些对象设置一些旋转变量。每当我的游戏到达其更新循环时,我会根据旋转变量旋转对象。如果它们旋转得足够多,我会触发onComplete回调。

以下代码有效......

public void Rotate(){
    _currentRotation = _0;
    _targetRotation = 180; //degrees
    _rotationSpeed = 50;

    try{
        _onComplete = LinkGroup.class.getDeclaredMethod("rotateComplete", null);
    }
    catch(Exception ex){

    }
}

......但这很难看。

我不喜欢声明方法rotateComplete并手动将其链接到通过字符串旋转。是否有类似于C#中的匿名函数,所以我可以在Rotate方法中声明rotateComplete方法?

对于奖励积分,有没有更好的方法来实现“getDeclaredMethod”所需的异常处理? Terseness是一种偏好。

3 个答案:

答案 0 :(得分:7)

根据我的理解,我相信只要某个游戏对象被旋转,你就试图在onRotateComplete()类中调用LinkGroup方法。您可以使用Java Swing用于处理按钮单击或其他事件的模式:这可以通过以下方式完成:

定义界面

interface IRotateHandler {
    public void onRotateComplete();
}

Rotate()更改为Rotate(IRotateHandler handler),然后在LinkGroup课程中,您可以像这样调用您的游戏对象。

gameObject.Rotate(new IRotateHandler() {
    public void onRotateComplete() {
        /* do your stuff!
    }
}

答案 1 :(得分:4)

您无需使用getDeclaredMethod。只需将_onComplete设为Runnable(或类似的东西),然后创建一个匿名类:

public void Rotate(){
    _currentRotation = _0;
    _targetRotation = 180; //degrees
    _rotationSpeed = 50;

    _onComplete = new Runnable() {
            public void run() {
                rotateComplete();
            }
        };
}

答案 2 :(得分:0)

Java 7还没有闭包。 Java 8 will.因此,暂时没有办法在Java中匿名编写该函数。

对于错误处理,快速glance at the API告诉我你扔了两个RuntimeExceptions和一个ReflectiveOperationException。抓住Exception可能是您最好的选择,除非您想以不同方式捕获所有这三种可能的异常,并根据每种异常采取不同的行动。