记录 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