在学习编写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的方法。您可以在代码中覆盖此方法。
接口使用模板,该模板可以是任何类型。因此,在实现接口时,可以指定期望从服务调用中返回的对象的类型。