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

从Java访问静态编程语言扩展函数

龙星辰
2023-03-14

有可能从Java代码中访问扩展函数吗?

我在静态编程语言文件中定义了扩展函数。

package com.test.extensions

import com.test.model.MyModel

/**
 *
 */
public fun MyModel.bar(): Int {
    return this.name.length()
}

其中MyModel是(生成的)java类。现在,我想在我的普通java代码中访问它:

MyModel model = new MyModel();
model.bar();

然而,那是行不通的。IDE无法识别bar()方法,编译失败。

work使用kotlin的静态函数:

public fun bar(): Int {
   return 2*2
}

通过使用导入com.test.extensions.ExtensionsPackage我的IDE似乎配置正确。

我从kotlin文档中搜索了整个Java-interop文件,也搜索了很多,但找不到。

我做错了什么?这可能吗?

共有1个答案

终彬郁
2023-03-14

也许像这样:

// CallExtensionFunction.java
package com.example.groundup;

public class CallExtensionFunction {

    public static void main(String[] args) {

        MyModel myModel = new MyModel();

        int bar = MyModelKt.bar(myModel);

        System.out.println(bar);
    }
}


// MyModell.kt
package com.example.groundup

fun MyModel.bar(): Int {
    return this.name.length
}

class MyModel() {
   val name = "Hugo"
}

扩展函数在相应的单例中提供,后缀为“Kt”作为静态方法。

 类似资料:
  • 到目前为止,我一直在使用这个静态编程语言密封类: 这在我的Kotlin和Java代码中都非常有效。今天我尝试将这个类改为使用对象(建议减少额外的类实例化): 我可以在我的其他静态编程语言文件中引用这个简单的版本,但是我现在正在努力在我的Java文件中使用它。 当我尝试在Java中引用时,我尝试了以下两种回弹编译错误: 有人知道我现在如何在Java中引用该实例吗?

  • 我在Kotlin文件中定义了扩展函数。 其中是(生成的)java类。现在,我想用正常的java代码访问它: 然而,那是行不通的。IDE将无法识别方法,编译失败。

  • 我试图用OkHttp和Cucumber在静态编程语言中设置一个Spring启动项目,并且在运行Cucumber任务时遇到以下错误。如何修复? 还有build gradle kts片段 我看到了这个错误https://github.com/square/okio/issues/647看起来可能是它,并修复了这个build.gradle,我如何将其翻译为kotlinbuild.gradle.kts?

  • 动机: 在我们的Android项目中,我们有许多验证,比如

  • 如图所示,https://stackoverflow.com/a/16639438/8949356,在Java中,当声明的类是公共类时,可以重写其函数 但是我想知道如何用静态编程语言编写完全相同的代码,我已经尝试了很多,但没有找到任何关于这个主题的东西。我可以在Java中去做这件事,但我的其余代码是用静态编程语言编写的,而且我不能一直带着这种怀疑;静态编程语言对我来说是一个很好的工具,我想学习它。

  • 假设我想要一个类型变量T,它扩展了某个类并实现了一个接口。类似于: Kotlin中的语法是什么?