我在Kotlin文件中定义了扩展函数。
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()
方法,编译失败。
public fun bar(): Int {
return 2*2
}
默认情况下,文件中声明的所有Kotlin函数都将编译为同一包中类中的静态方法,并且使用源自Kotlin源文件的名称(第一个字母大写,扩展名“.kt”替换为“kt”后缀)。为扩展函数生成的方法将有一个附加的第一个参数,该参数具有扩展函数接收器类型。
将其应用于原始问题,Java编译器将看到名为example.kt的Kotlin源文件
package com.test.extensions
public fun MyModel.bar(): Int { /* actual code */ }
就像声明了下面的Java类一样
package com.test.extensions
class ExampleKt {
public static int bar(MyModel receiver) { /* actual code */ }
}
import com.test.extensions.ExampleKt;
MyModel model = new MyModel();
ExampleKt.bar(model);
import static com.test.extensions.ExampleKt.*;
MyModel model = new MyModel();
bar(model);
问题内容: 是否可以从Java代码访问扩展功能? 我在Kotlin文件中定义了扩展功能。 (生成的)java类在哪里。现在,我想用普通的Java代码访问它: 但是,这不起作用。 IDE无法识别该方法,并且编译失败。 起作用的是与kotlin的静态函数一起使用: 通过使用我的IDE似乎已正确配置。 我从kotlin文档中搜索了整个Java互操作文件,并且在谷歌上搜索了很多,但是找不到。 我究竟做错了
我想在使用Kotlin扩展函数时访问Java的私有字段。 假设我有一个Java类。ABC只有一个私有字段。我想用静态编程语言编写一个扩展函数,无论出于什么原因使用该字段。 Kotlin的功能是: 我得到的错误是: 无法访问“mPrivateField”:它在“ABC”中是专用的 有没有办法绕过这个限制?
我在Kotlin编程,我有日期类的扩展功能。 它在< code>onCreate中工作正常,但是在< code >异步任务中的< code>doInBackground中出现错误 我里面有这些线 < code > getCurrentDateTime()返回< code>Date类的实例,并且为< code>toString()中的参数给出了错误 也可以参数为公共开放的乐趣toString():字
静态编程语言全局函数: 用java调用此函数: 它会给出以下错误:无法解析方法'show WarningDialog(com.us.stickermaker.backgroundRemover.##################################################################################################### 该
有可能从Java代码中访问扩展函数吗? 我在静态编程语言文件中定义了扩展函数。 其中MyModel是(生成的)java类。现在,我想在我的普通java代码中访问它: 然而,那是行不通的。IDE无法识别bar()方法,编译失败。 work使用kotlin的静态函数: 通过使用导入com.test.extensions.ExtensionsPackage我的IDE似乎配置正确。 我从kotlin文档中
我正在开发一个chrome扩展,遇到了一个大问题。 奇怪的是,我可以访问iframe的html。因此,这段代码在chrome扩展中可以完美地工作: 我尝试将“all_frames”:true放入清单文件中,但没有成功:(