记录 Kotlin 一处 Bug

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

1public interface Foo {
2    Foo BAR = () -> false;
3
4    boolean provideBoolean();
5}

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

1enum EnumFoo implements Foo {
2    BAR;
3
4    @Override
5    public boolean provideBoolean() {
6        return false;
7    }
8}

同时有另一个 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