【问题标题】:LibGdx - cross-platform development, waiting for callbacksLibGdx - 跨平台开发,等待回调
【发布时间】:2026-01-27 06:50:02
【问题描述】:

我正在尝试在我的应用中实现 Firebase 之类的异步功能。

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

public interface SomeInterface {

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

public void getCallBackResult(CallBackInterface callBackInterface);

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

有什么方法可以编写“一刀切”的回调逻辑吗?这可以从 LibGdx Core 中使用。

编辑:

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

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

            }
        });

所以如果我需要另一个回调方法,我需要添加另一个接口和另一个方法。我需要为我使用的每种方法执行此操作。它只会变得混乱。所以想知道有没有办法解决它。

【问题讨论】:

  • 您能否详细说明您要解决的问题?我不清楚你所说的“一刀切的回调逻辑”是什么意思。
  • 嗯,很难用语言表达。我试试!

标签: asynchronous callback libgdx


【解决方案1】:

您的答案并不是针对 libGDX 的,事实上,“一刀切”的回调是您通过迁移到 Java 8 得到的,这些回调是从函数式编程中借用的一些很酷的特性,例如 Lambda expressions,它允许您以更好的方式操作函数(包括回调)。如果可能的话,我建议阅读学习如何使用 Java 8 接口。

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

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

例如

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.... 
    };
});

【讨论】: