使用Java 1.5编译thrift生成的类时出错

时间:2014-10-31 15:07:54

标签: java c++ eclipse compilation thrift

`Platform`: Windows 7, MinGW, MSYS, Java 1.5

我有节俭0.9.1编译器(预构建用于windows)和源代码。我用Ant来构建java库。 我创建了一个thrift idl并用编译器编译它。生成代码文件没问题。 我在我的项目中添加了这些文件,并添加了slf4j(从他们的站点下载)和libthrift。 除了与覆盖方法相关的错误之外,我之前遇到的大多数错误(导入等)都消失了。 所以基本上抱怨像:

  

Server类型的clear()方法必须覆盖超类方法

,类似于compareTowriteread等等。简而言之,它会抱怨所有被覆盖的方法。这是所有thrift编译器生成的代码,我没有改变任何东西。

有任何不兼容性吗?我真的找不到任何提及。我已经尝试删除然后添加库,我也尝试过清理,刷新,验证项目,但错误仍然存​​在。

我也尝试编译代码(节俭代码),但MinGW也是一个令人头痛的问题。即使我已安装它,也找不到configure。如果我运行msys控制台,它可以configure但不能make抱怨inttypes.h不存在(这不在msys include目录中但在MinGW中存在包含目录。)。

任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:1)

您使用的是Java 5吗?使用Java 5 @Override不会在接口上搜索方法,只在超类上搜索。

如果您正在使用Java 5编译器尝试使用更新的javac(最好是7或8)并且看到它有效。

修改

不确定这是否在您的Thrift版本中,但是在我看来,在生成代码以指定您希望生成的代码符合Java 5时,您会指定一个名为java5的标志

java (Java):
    beans:           Members will be private, and setter methods will return void.
    private-members: Members will be private, but setter methods will return 'this' like usual.
    nocamel:         Do not use CamelCase field accessors with beans.
    fullcamel:       Convert underscored_accessor_or_service_names to camelCase.
    android:         Generated structures are Parcelable.
    android_legacy:  Do not use java.io.IOException(throwable) (available for Android 2.3 and above).
    java5:           Generate Java 1.5 compliant code (includes android_legacy flag).
    reuse-objects:   Data objects will not be allocated, but existing instances will be used (read and write).
    sorted_containers:
                     Use TreeSet/TreeMap instead of HashSet/HashMap as a implementation of set/map.