【问题标题】:Errors compiling Apache Thrift-generated Java classes that implement an abstract class编译实现抽象类的 Apache Thrift 生成的 Java 类时出错
【发布时间】:2012-03-21 13:04:45
【问题描述】:

我的团队正在尝试使用 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 仍然说存在与这些行相关的各种错误,包括以下内容:

Bound mismatch:Backend.Client 类型不是 TServiceClientFactory Backend.java /server/src/thrift 第 42 行 Java 问题类型的有界参数的有效替代品

TServiceClient 类型不能是 Client 的超接口;超级接口必须是接口 Backend.java /server/src/thrift 第 41 行 Java 问题

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

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

【问题讨论】:

    标签: java eclipse thrift


    【解决方案1】:

    我在 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代码,这些错误得到了解决。

    【讨论】:

      【解决方案2】:

      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>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-23
        相关资源
        最近更新 更多