2

我的 GWT 应用程序是用 IDEA 编写的。为了进行 gwt RPC 调用,我创建了两个接口。第一个:

RemoteServiceRelativePath("ServerManagement")
public interface ServerManagement extends RemoteService {

String userLogin(String customerId, String login, String password) throws Exception;

ArrayList<PropertyItem> getProperties(String customerId) throws Exception;

void receive(String customerId) throws Exception;

第二个异步:

public interface ServerManagementAsync {

    void userLogin(String customerId, String login, String password, AsyncCallback<String> asyncCallback);
    void getProperties(String customerId, AsyncCallback<ArrayList<PropertyItem>> asyncCallback);
    void receive(String customerId, AsyncCallback<String> asyncCallback);       
} 

但是在两个接口中,带有“receive”方法的行取消了红色,并且 ide 返回了消息:

Methods of asynchronous remote service 'ServerManagementAsync' are not consistent with 'ServerManagement' less... (Ctrl+F1) 
This inspection reports any inconsistency between a methods of synchronous and asynchronous interfaces of remote service

如何解决这个问题?

4

2 回答 2

2

异步接口必须是:

public interface ServerManagementAsync {

    void userLogin(String customerId, String login, String password, AsyncCallback<String> asyncCallback);
    void getProperties(String customerId, AsyncCallback<ArrayList<PropertyItem>> asyncCallback);
    void receive(String customerId, AsyncCallback<Void> asyncCallback);       
} 

注意方法receive中的AsyncCallback <Void>,AsyncCallback必须用sync接口中方法返回的Type参数化。

对不起,我的英语不好。干杯。

于 2013-05-15T13:24:17.253 回答
0

我同意楼上的回答。我还想提一下,当 IntelliJ IDEA 12 尝试在构建时在 target/generated-sources 文件夹中自动生成异步接口时,我看到了完全相同的错误“异步远程服务的方法不一致”。我相信这是IDEA中的一个错误。手动将函数添加到 generate-sources 目录中生成的 Async 接口为我修复了错误,实际上导致 IDEA 在以后的编译中正确生成文件,即使我删除了 generated-sources 文件夹并重新编译。

在 Nikitin 的案例中,这似乎是他手动编码的 Async 接口“receive”方法的 AsyncCallback 参数被键入为的结果

AsyncCallback<String>  // does not work - String is not the synchronous method's return type

什么时候应该

AsyncCallback<Void>   // works, type matches with the synchronous method's return type

recieve 方法的 AsyncCallback 类型需要为 Void,因为它与 ServerManagement.java 中定义的同步接口中的接收方法的 void 返回类型匹配。

这是一个屏幕截图:

这些类型必须匹配

于 2013-08-10T22:08:14.083 回答