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

如何在Java中使用Kotlin类的中缀函数?

慕宏儒
2023-03-14

让我们假设我在科特林有一门课,如下所示

此外,让我们定义一个内插函数生成电子邮件域,它基于给定域的名称生成电子邮件地址

class Person(var name: String) {}


infix fun Person.generateEmailWithDomain(domain: String): String = "${this.name}@$domain.com"

现在,正如有人说Kotlin是100%可与Java互操作的,我如何在Java类中使用这个中缀函数

上面使用infix可能不合适,但我想知道如何在Java中使用。

如果我的理解有误,请纠正。

共有1个答案

松高歌
2023-03-14

根据文件(https://kotlinlang.org/docs/reference/functions.html#infix-注记法),中缀对我来说似乎只是语法上的甜点,因为即使示例中也显示了两种调用此类函数的方法:

class MyStringCollection {
    infix fun add(s: String) { /*...*/ }

    fun build() {
        this add "abc"   // Correct
        add("abc")       // Correct
        //add "abc"        // Incorrect: the receiver must be specified
    }
}

因此,从Java开始,我将简单地使用第二个,根据您的情况进行定制

String result = somePerson.generateEmailWithDomain(someString);

(因为将扩展函数定义为外部Person.generateEailBackDomain()也只是一个可选的可能性,当调用时,这将是一个实际的Person对象的方法)

String result = Person.generateEmailWithDomain(somePerson, someString);

 类似资料:
  • 问题内容: 假设我们具有以下暂停功能: 如果要在我现有的Java类之一中调用此函数(暂时无法将其转换为Kotlin)并获取其返回值,则必须提供a 作为其参数(很明显)。 我的问题是,我该如何实施。特别是它的吸气剂。 问题答案: 首先,将模块添加到您的依赖项中。在您的Kotlin文件中,定义以下与Java编写异步API样式相对应的异步函数: 现在,以与在Java世界中使用其他异步API相同的方式在J

  • 当函数声明类型参数时: 我应该如何在kotlin中调用原始的未类型化的类型化函数? 在爪哇中,我有: 因为< code>typedFunction声明了一个名为< code>T的类型,并将它的两个参数绑定到这个声明的类型,并且在调用站点上,我循环了多个确切类型未知的值(但已知是安全的,两个参数符合相同的类型),所以我不能按预期的方式调用typedFunction。我得把它铸造成一种原始类型。 如何

  • 从Kotlin调用Java代码时,存在SAM转换,因此Java代码如下所示: 可以如下所示: 现在,我正在处理一个Kotlin项目,我想将功能接口定义为事件侦听器: 在SomeClass中,我有一个设置监听器的函数: 当我创建这个类的实例并尝试调用setter函数时,我是这样做的: 我知道静态编程语言有函数类型,因此不支持来自各种站点的SAM转换,例如这个站点。 我读过一些关于函数类型的书,但我以

  • 我找到了一个符合我目的的图书馆,但它是写在Kotlin上的。我可以在Java项目中使用它吗? 框架:https://github.com/mpetlyuk/initial_tips Kotlin上的用法:

  • 我开玩笑地增加,减少物品数量。我想算数。文本加上“T”字符。当我试图编写这样的代码时。错误代码:java.lang.NumberFormatException:对于输入字符串:“1T”如何解决此问题?有人能帮忙吗??