类型不是边界参数的有效替代

时间:2019-06-11 13:04:30

标签: groovy

我最近才从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版关闭。因此,我遇到的错误可能是由于修复而引入的某种回归。

0 个答案:

没有答案