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