在学习编写Web服务的异步客户端时,我遇到了这段代码。我试图了解如何在这里使用"new AsyncHandler<Inventory>() {...}"。我是Java的新手,有几件事我不理解:


AsyncHandler来自javax.xml.ws.AsyncHandler,以及清单,本地或自定义对象如何成为其中的一部分。 AsyncHandler<Inventory>是什么意思?
使用“ new AsyncHandler<Inventory>() {...}”是否是类AsyncHandler的实例化或实现?
handleResponse和AsyncHandler是什么关系?


这是代码:

public class StockWebServiceClientCallbackMainMyCopy {
    private static Logger log = Logger.getLogger(StockWebServiceClientCallbackMain.class.getName());

    @SuppressWarnings("unchecked")
    public static void main(String[] args) throws Exception {
        final Stock stockPort = new StockService().getStockPort();
        log.info("Got StockService port successfully");

        final int thresh = 2;
        // TODO: (53.01) Call async method passing in callback method
        //               In the callback method, print out all the items and exit
        //               Important: call System.exit() from callback
        stockPort.getStockItemsWithQuantityLessThanAsync(thresh, new AsyncHandler<Inventory>(){
            @Override
            public void handleResponse(Response<Inventory> response) {
                log.info("Callback invoked");
                try{
                    Inventory inventory = response.get();
                    for (Item item : inventory.getItems()){
                        System.out.println(item.getProductId() + " " + item.getQuantity());
                    }
                    System.exit(0);
                }
                catch(Exception e){
                    e.printStackTrace();
                }
            }
        });

        // TODO: (53.02) Note simulation of other activity using Thread.sleep()
        while (true){
            try{
                Thread.sleep(1000);
            } catch (InterruptedException e){
                // ok
            }
        }
    }
}

最佳答案

javax.xml.ws.AsyncHandler是一个接口。您在代码中所做的就是创建一个实现该接口的“匿名”类的实例。

接口(AsyncHandler)定义了一个称为handleResponse的方法。您可以在代码中覆盖此方法。

接口使用模板,该模板可以是任何类型。因此,在实现接口时,可以指定期望从服务调用中返回的对象的类型。

09-10 23:00