LibGdx - 跨平台开发,等待回调

时间:2017-03-17 12:06:51

标签: asynchronous callback libgdx

我正在尝试在我的应用中实现Firebase,这是异步的。

现在我可以像这样写一个接口回调:

public interface SomeInterface {

    public interface CallBackInterface{
        void getX(X x);
    }

public void getCallBackResult(CallBackInterface callBackInterface);

如果我有一些方法需要在继续之前等待回调,那么这很好。但是,如果我有20多个方法需要回调,其中一些方法相互交互,它就变得完全混乱,而且只是非常丑陋的代码。

我是否可以通过某种方式撰写"一刀切?#34;回调逻辑?这可以从LibGdx Core中使用。

编辑:

要使用上述内容,我需要从Core中调用它:

game.getInterface().getCallBackResult(new SomeInterface.CallBackInterface() {
            @Override
            public void getX(X x) {

            }
        });

因此,如果我需要另一个回调方法,我需要添加另一个接口和另一个方法。我需要为我使用的每种方法执行此操作。它变得凌乱。所以想知道是否有任何解决方法。

1 个答案:

答案 0 :(得分:1)

你的答案并不是特定于libGDX的事实,因为你可以通过从Lambda expressions这样的函数式编程中借用的一些很酷的功能转移到Java 8中来获得“一刀切”的回调你以更好的方式操纵函数(包括回调)。我建议尽可能学习如何使用Java 8接口。

但是,如果Java 8不是一个选项(例如,为了向后兼容),您可以非常轻松地汇总自己的通用回调类,然后在代码中使用它。

这样你就不会为每种类型创建一个新的接口,但是这不会像lambda表达式那样灵活,因为你仍然需要为每个参数创建一个接口。

E.g。

interface MyCallback { void result(); }

interface MyCallback1<X> { void result(X x); }

interface MyCallback2<X,Y> { void result(X x, Y y); }

// And so on for 3 args, 4 args etc...

然后可以在需要时使用它们:

class SomeFireBaseClass {
    public void addUserCallback(MyCallback1<User> callback) {
        ...
    }

    public void addUserEventCallback(MyCallback2<User, String> callback) {
        ...
    }
}

...

someFirebaseObject.addUserCallback(new MyCallback1<User> {
    public void result(User user) {
        // Do something.... 
    };
});

someFirebaseObject.addUserEventCallback(new MyCallback2<User,String> {
    public void result(User user, String event) {
        // Do something.... 
    };
});