编译Apache Thrift生成的实现抽象类的Java类的错误

时间:2012-03-03 03:51:16

标签: java eclipse thrift

我的小组正在尝试使用Apache Thrift构建服务器,但我们遇到了奇怪的编译问题。在Thrift生成的Java文件中,存在以下行:

  public static class Client extends shared.BasicServer.Client implements org.apache.thrift.TServiceClient, Iface {
  public static class Factory implements org.apache.thrift.TServiceClientFactory<Client> {

这些被定义为内部类。当我尝试在Eclipse中构建项目时,它实际上创建了.class文件并且程序运行,但是Eclipse仍然说有与这些行相关的各种错误,包括以下内容:

  

绑定不匹配:Backend.Client类型不是TServiceClientFactory类型的有界参数的有效替代品Backend.java / server / src / thrift line 42 Java问题

     

TServiceClient类型不能是Client的超接口;一个superinterface必须是一个接口Backend.java / server / src / thrift line 41 Java问题

我相信这是因为org.apache.thrift.TServiceClient实际上是一个抽象类,而不是一个接口,而Client正在尝试实现它。但是,正如我之前所说,程序编译和工作,我真的不明白如何。

有没有人知道如何摆脱/抑制这些错误?我觉得我应该将一些简单的选项传递给我的构建配置。

2 个答案:

答案 0 :(得分:3)

我在Eclipse中遇到了同样的问题,以及IntelliJ。

我发现thrift编译器和lib-thrift之间的thrift版本不同步。

我有0.6.0版本的thrift(来自$ sudo port install thrift)我用来生成我的java代码,并使用了lib-thrift-0.8.0.jar

我按照以下说明安装Thrift from source, for my platform,然后重新生成并更新了我生成的java thrift代码并解决了这些错误。

答案 1 :(得分:1)

maven生成:

<dependency>
    <groupId>org.apache.thrift</groupId>
    <artifactId>libthrift</artifactId>
    <version>0.8.0</version>
    <type>pom</type>
</dependency>

只需删除元素:类型,然后重建它。

<dependency>
    <groupId>org.apache.thrift</groupId>
    <artifactId>libthrift</artifactId>
    <version>0.8.0</version>
</dependency>