异步接口如何连接到GWT.create?

异步接口如何连接到GWT.create?,gwt,Gwt,当我使用GWT 2.6创建一个示例项目时,我最终得到了以下RPC代理初始化代码: private final GreetingServiceAsync greetingService = GWT.create(GreetingService.class); 迎宾服务的定义如下: @RemoteServiceRelativePath("greet") public interface GreetingService extends RemoteService { String greet

当我使用GWT 2.6创建一个示例项目时,我最终得到了以下RPC代理初始化代码:

private final GreetingServiceAsync greetingService = GWT.create(GreetingService.class);
迎宾服务的定义如下:

@RemoteServiceRelativePath("greet")
public interface GreetingService extends RemoteService {
    String greetServer(String name) throws IllegalArgumentException;
}
public interface GreetingServiceAsync {
    void greetServer(String input, AsyncCallback<String> callback)
            throws IllegalArgumentException;
}
GreetingServiceAsync定义为:

@RemoteServiceRelativePath("greet")
public interface GreetingService extends RemoteService {
    String greetServer(String name) throws IllegalArgumentException;
}
public interface GreetingServiceAsync {
    void greetServer(String input, AsyncCallback<String> callback)
            throws IllegalArgumentException;
}
GWT.Create的签名为:

public static <T> T create(Class<?> classLiteral)
考虑到所有这些,我希望GWT.create对greetingService的赋值会失败。因为greetingService是GreetingServiceAsync类型,GWT.create将返回greetingService,它与异步版本无关。我希望Java编译器将此赋值标记为无效,但它没有这样做

异步接口与其非异步版本之间的链接在哪里?Java编译器显然知道这一点,但我在项目源代码中没有看到它

关于它编译时不会出错的事实:请注意参数的GWT.create类型如何不使用T type参数;因此,签名所说的是:您可以传递任何类,它可以返回任何类型的对象T是T extends对象的缩写,作为参数传递的GreetingService.class和返回的GreetingServiceAsync之间没有连接,至少在GWT.create方法签名中没有

该连接实际上在GWT编译器中,在RPC生成器中,对于传递给扩展RemoteService的GWT.create的每个类都会触发该连接,它只是基于一个命名规则:返回一个类型,该类型的名称是以Async为后缀的参数类之一。当然要进行检查:两者都必须是接口,并且异步接口中的方法必须与非异步接口中的方法相同,除非非异步接口的返回类型被移动到另一个AsyncCallback参数的类型参数。顺便说一句,这种特殊情况是GWT.create仍然具有此签名的唯一原因,其中返回类型与参数类型无关


谢谢你,托马斯,我错过了关于ClasTerral没有T型的要点。