编译以下代码时出现错误:

import groovy.transform.CompileStatic

@CompileStatic
class Test {
  trait BaseTrait {}
  trait ExtendingTrait extends BaseTrait {}
  static class BaseTraitImplementor implements BaseTrait {}
  static class ExtendingTraitImplementor implements ExtendingTrait {}
  static class BothTraitImplementor implements ExtendingTrait, BaseTrait {}
  static class UsingTraits<T extends BaseTrait> {}
  UsingTraits<BaseTraitImplementor> instance1
  UsingTraits<ExtendingTraitImplementor> instance2 // <- compiler complains here
  UsingTraits<BothTraitImplementor> instance3
}

编译错误:
Groovy-Eclipse: Bound mismatch: The type Test.ExtendingTraitImplementor is not a valid substitute for the bounded parameter <T extends Test.BaseTrait> of the type Test.UsingTraits<T>

看来编译器无法解决ExtendingTrait实际上扩展BaseTrait的问题,我需要手动提供它(请参见BothTraitImplementor类)。

我是在做错什么还是错误?

最佳答案

我找到了答案。事实证明,Groovy-Eclipse编译器已经过时并且存在许多错误。当我切换到groovyc时,一切进展顺利。

10-04 18:23