Scala 编译器似乎无法处理使用静态方法实现接口的枚举,该静态方法捕获枚举类型作为方法参数。
考虑以下界面:
//Identifiable.java
package com.example;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Stream;
import static java.util.stream.Collectors.toMap;
public interface Identifiable {
String name();
static <E extends Enum<E> & Identifiable> Map<String, E> valuesByName(final E[] values) {
return Stream.of(values).collect(toMap(Identifiable::name, Function.identity()));
}
}
以及实现它的枚举:
//Size.java
package com.example;
public enum Size implements Identifiable {
SMALL, MEDIUM, LARGE;
}
最后,一个使用 Size 枚举的 Scala 应用程序:
//Broken.scala
package com.example
object Broken extends App {
println(Size.SMALL)
}
尝试构建类时出现以下编译错误(在 2.12.3 中):
错误:(4, 10) 涉及类 Size 的非法循环继承
println(尺寸.小)
我是否遗漏了什么或者这是编译器中的错误?
转到文件>>项目结构>>全局库并指向pom.xml中给出的正确的scala版本