当前位置: 首页 > 知识库问答 >
问题:

在静态编程语言中使用Lambda表达式实现函数接口

安轶
2023-03-14
@FunctionalInterface
interface Interf {
    fun m1(num: Int)
}

fun main() {
    val a: Interf = { 34 -> println("Hello world !!") }
}

编译时得到这个错误

意外标记(使用;分隔同一行的表达式)

柯特林 lambda 函数语法是否与 Java Lambda 表达式略有不同?

共有1个答案

许子平
2023-03-14

首先,这也不会在java中编译:

@FunctionalInterface
interface Interf {
    void m1(int num);
}

class Main {
    public static void main(String[] args) {
        Interf f =  34 -> System.out.println("Hello world !!"); //compilation error here
    }
}

几乎相同的错误:

error: ';' expected
        Interf f =  34 -> System.out.println("Hello world !!");
                      ^

为了使其正确,应更改 lambda 参数的名称,以便它成为有效的 java 标识符。

例如,这将编译:

Interf f =  x -> System.out.println("Hello world !!");

现在,回到静态编程语言。1.4版引入了SAM转换的语法:

fun interface Interf {
    fun m1(num: Int)
}

它可以用以下实例化:

kotlin prettyprint-override">val a = Interf { println("Hello world !!") }

隐式声明的 it 参数的约定仅引用 lambda 参数保留在此处。

 类似资料:
  • 我在kotlin文件中定义了这个函数。 想这样从Java调用它 随着 但它给了我 我意识到lambda函数的参数似乎是< code >列表 如果我把类转换成java,我可以很容易地用lambda回调函数调用那个函数。 我做错了什么

  • 我知道内联函数可能会提高性能 编译器可以发出以下代码,而不是为参数创建函数对象并生成调用。(来源) 但是我发现没有kotlin为一个非内联函数创建的函数对象。为什么?

  • 我正在学习静态编程语言,我在函数方面有一些问题。我试图创建一个带有通用参数的函数接口。Java我会创建这样的东西: 然后我可以在其他地方像这样使用它(给定扩展: 你是怎么和Kotlin写这篇文章的? 我尝试的第一件事是使用如下类型别名: 但是,当我将绑定添加到type参数时,它停止了工作: 第二种方法是编写一个扩展函数类型的接口: 然而,现在我不知道如何用这个来实例化lambda函数。当我从中创建

  • 本文向大家介绍Java使用Lambda表达式实现Function 接口,包括了Java使用Lambda表达式实现Function 接口的使用技巧和注意事项,需要的朋友参考一下 Function <T,R>接口是java.util.function包中的函数接口。此接口需要一个参数作为输入并生成结果。Function <T,R>接口可用作lambda 表达式或方法引用的分配目标。它包含一个抽象方法:

  • 本文向大家介绍Python3中lambda表达式与函数式编程讲解,包括了Python3中lambda表达式与函数式编程讲解的使用技巧和注意事项,需要的朋友参考一下 简单来说,编程中提到的 lambda 表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数。其一般有如下几种使用方式: 1、lambda的一般形式是关键字lambda后面跟一个或多个参数,紧跟一个冒号

  • 我试图将@Age constraint的实现从java复制到Kotlin,我复制了Java代码库,并使用IDE将其转换为Kotlin代码。 Java代码 Intellij生成的对应静态编程语言代码 Kotlin代码导致错误声明“注释类中不允许成员”。将注释类List从Age中移出是否可以解决此问题?还有其他方法可以在另一个类中实现注释类吗? 非常感谢。