在 Scala 中使用 Java 枚举时如何解决“非法循环继承”编译错误?

问题描述 投票:0回答:1

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(尺寸.小)

我是否遗漏了什么或者这是编译器中的错误?

scala enums
1个回答
0
投票

转到文件>>项目结构>>全局库并指向pom.xml中给出的正确的scala版本

© www.soinside.com 2019 - 2024. All rights reserved.