我最近才从Groovy 2.5.6升级到2.5.7。使用2.5.6可以很好地编译代码,但是使用2.5.7可以得到以下错误The type E is not a valid substitute for the bounded parameter <E extends java.lang.Enum<E>
。
我尝试在Java中运行等效项,在等效项中(与版本2.5.6相同)编译良好。 (请注意,我在oracle java 8.141上运行)
这里是常规代码:
class A<E extends Enum<E> & Sayable> {
B<E> b // here the error occurs
}
class B<E extends Enum<E> & Sayable> {
}
interface Sayable {
String saySomething()
}
enum Hello implements Sayable {
HELLO;
@Override
String saySomething() {
return name()
}
}
public static void main() {
A<Hello> a = new A<>()
}
这里是等效的Java代码:
class Scratch {
interface Sayabel {
String saySomething();
}
enum Hello implements Sayabel {
HELLO;
@Override
public String saySomething() {
return name();
}
}
static class A<E extends Enum<E> & Sayabel>{
B<E> b;
}
static class B<E extends Enum<E> & Sayabel> {
}
public static void main(String[] args) {
A<Hello> a = new A<>();
}
}
很显然,这不是真正的代码,但是基本上是相同的。
有人有主意吗?
编辑:
经过进一步研究,我发现this的groovy问题已由2.5.7版关闭。因此,我遇到的错误可能是由于修复而引入的某种回归。