我正在尝试在我的应用中实现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) {
}
});
因此,如果我需要另一个回调方法,我需要添加另一个接口和另一个方法。我需要为我使用的每种方法执行此操作。它变得凌乱。所以想知道是否有任何解决方法。
答案 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....
};
});