Kotlin @FunctionalInterface 使用多种抽象方法进行编译

标签 kotlin functional-interface

尝试编译 Java 时 @FunctionalInterface具有超过 1 个非抽象方法会引发编译错误。

但是,在 Kotlin 中执行相同操作时,不会引发错误或警告,即以下 Kotlin interface编译成功:

@FunctionalInterface
interface Foo {
    fun foo()
    fun foo(params: Map<String, String>)
}

这是 Kotlin 编译器中的预期行为还是错误?

请注意,为上述 Kotlin 片段生成的字节码等同于以下 Java 片段(正确地 - 无法编译):
@FunctionalInterface
// metadata omitted
public interface Foo {
   void foo();
   void foo(@NotNull Map var1);
}

最佳答案

问题 KT-25512已提交给 JetBrains 的问题跟踪器(由另一个用户)报告编译器在 @FunctionalInterface 时出现异常的事实。应用于非 SAM 界面,截至 2019 年 2 月 10 日,该问题仍处于打开状态,没有任何事件。

关于Kotlin @FunctionalInterface 使用多种抽象方法进行编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54514692/

相关文章:

android - Kotlin Android 打印到控制台

java - 类级别的 JUnit5 参数化测试

java - Lombok @Nonnull 是否也有效果,例如供应商?

kotlin - 如何在 Kotlin 中将功能接口(interface)实现为 lambda?

java - lambda 中的无限 while 循环内的 Thread.sleep 不需要 'catch (InterruptedException)' - 为什么不呢?

java - 无法访问 'java.lang.Object',它是 'org.gradle.api.artifacts.dsl.DependencyHandler' 的父类(super class)型

java - 如何在 View 上存储数据?

kotlin - 我们能否为我们无法控制的类型联合实现编译时类型安全?

java - lambda 中的无限 while 循环内的 Thread.sleep 不需要 'catch (InterruptedException)' - 为什么不呢?

java - 使用 Java 8 的类流