【问题标题】:How can i make my method return a callback?如何让我的方法返回回调?
【发布时间】:2021-03-21 19:55:23
【问题描述】:

我正在尝试使用 java binance api 为交易机器人编写代码。 我想做的是使用库中的异步客户端来创建一个方法来获取数据/烛台然后返回它。

我的问题是异步客户端返回对回调的响应,我现在知道如何处理它,让我的方法返回如下示例的数据:

    public List<Candlestick> asyncGetCandles(){
    //get the data
        return response /**List<Candlestick>response*/
    }

这是我目前得到的:

    public void asyncGetCandles() throws ParseException, IOException {

    BinanceApiClientFactory factory = BinanceApiClientFactory.newInstance();
    BinanceApiAsyncRestClient asyncClient = factory.newAsyncRestClient();

    long start = dateTime.startOfListing();
    long now = System.currentTimeMillis();

    BinanceApiCallback<List<Candlestick>> callback = response -> {
        System.out.println(response);//prints 1000 candles
    };


    asyncClient.getCandlestickBars("BTCUSDT", CandlestickInterval.HOURLY, 1000, start, now, callback);

    /**How to return the response here?*/
}

非常感谢任何有关如何执行此操作的帮助!

【问题讨论】:

    标签: java callback return binance


    【解决方案1】:

    它应该看起来像这样:

    package stackoverflow;
    
    import java.io.IOException;
    import java.text.ParseException;
    import java.util.List;
    
    public class ReturnAsyncCallback {
        interface BinanceApiCallback<T> { // either this usecase with interface
            BinanceApiCallback<T> run(String response);
        }
        abstract class BinanceApiCallback2<T> { // or this usecase with abstract base class
            abstract BinanceApiCallback<T> run(String response);
        }
        static class Candlestick {
    
        }
    
        public BinanceApiCallback<List<Candlestick>> asyncGetCandles() throws ParseException, IOException {
    
            final BinanceApiClientFactory factory = BinanceApiClientFactory.newInstance();
            final BinanceApiAsyncRestClient asyncClient = factory.newAsyncRestClient();
    
            final long start = dateTime.startOfListing();
            final long now = System.currentTimeMillis();
    
            final BinanceApiCallback<List<Candlestick>> callback = (response) -> {
                System.out.println(response);//prints 1000 candles
            };
    
    
            asyncClient.getCandlestickBars("BTCUSDT", CandlestickInterval.HOURLY, 1000, start, now, callback);
    
            /**How to return the response here?*/
            return callback;
        }
    
    }
    

    请注意,lambda 表达式有两种方式。两者都需要一个具有完全一个抽象(未实现)方法的类:

    1. 使用只有 1 个(抽象)方法的接口,可以有尽可能多的默认方法。
    2. 使用具有完全 ONE 抽象方法的抽象基类。

    我的示例的附加说明:

    1. 内部类 BinanceApiCallback 和 BinanceApiCallback2 和 Candlestick 仅适用于 http://sscce.org/

    更多问题的提示:

    1. 您的代码不是http://sscce.org/,因此我们很难回答。

    【讨论】:

    • 感谢您的示例和帮助,让它发挥作用!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-15
    • 1970-01-01
    • 1970-01-01
    • 2014-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多