记录 Kotlin 一处 Bug

简单记录一个 Kotlin 的 bug,调试的时候怀疑人生了。

public interface Foo {
    Foo BAR = () -> false;

    boolean provideBoolean();
}

Java 中定义 Interface Foo,需要实现一个方法提供布尔值,同时定义了另一个静态常量 BAR。

enum EnumFoo implements Foo {
    BAR;

    @Override
    public boolean provideBoolean() {
        return false;
    }
}

同时有另一个 Enum 实现了接口,定义了 BAR 覆盖了之前的常量。

那么在 Java 中声明 EnumFoo bar = EnumFoo.BAR 实际上是什么呢?当然就是 EnumFoo.BAR 了没什么问题。

但是在 Kotlin 中,val bar = EnumFoo.BAR,这居然是 Foo BAR = () -> false


给 JetBrains 家提了个 Ticket Inconsistent Behavior With Java When Enum Implement Interface With Same Name