首页 > 解决方案 > 在eclipse中编译groovy会产生编译时错误

问题描述

我正在进行一个我没有开始但继承了一些要维护的东西的项目。代码是混合了一些 groovy 的 java。我正在使用 Eclipse ......我知道如何拼写“groovy”,但仅此而已,但到目前为止一切都很好......问题:

使用 java 8,Eclipse Oxygen(使用 Groovy 2.5.7 编译器)这个看起来像编译的代码没有问题:

class Bgc<T extends Bgc> {
    protected StartListener sln
    interface StartListener
    {
      void onStarted(T cmd)
    }
    
    T onStarted(StartListener startListener)
    {
      this.sln = startListener 
      (T)this
    }
}

FWIW 我们的构建脚本构建这个结构也没有问题......但是如果我尝试在 Eclipse 4.10.0、java 11 中构建它。我的 Eclipse 声称拥有 2.5.14 编译器和 3.0 编译器用于 groovy ......选择在这个支持 java 11 的 eclipse 中有效...... Eclipse 4.10.0 只是在“StartListener”界面中给了我一个错误,抱怨 onStarted(T cmd) 正在引用非静态类型 T。

我不明白 Eclipse Oxygen/Java 8/groovyc 2.5.7(允许构建)是否只是忽略了 ...(T cmd)中的“T”,或者是否是较新的 java/groovyc。如果之前的组合忽略了它,那么我可以(大概)删除“T”。

标签: javaeclipsegroovy

解决方案


内部接口是静态内部类,因此它不能引用其外部类的任何类型参数。只有非静态成员才能引用 T。


推荐阅读