我将我的一个Java类转换为Kotlin和类,如下所示.
class MainApplication : Application() {
companion object {
operator fun get(context: Context): MainApplication {
return context.applicationContext as MainApplication
}
}
}
Run Code Online (Sandbox Code Playgroud)
它具有静态功能get.
我仍然有一个访问它的Java函数.
MainApplication application = MainApplication.get(mContext);
Run Code Online (Sandbox Code Playgroud)
当MainApplication在Java中时很好.但是当MainApplication在Kotlin中时,上面的代码错误
Error:(27, 54) error: cannot find symbol method get(Context)
Run Code Online (Sandbox Code Playgroud)
我怎样才能访问get上面的Java代码?
Mar*_*ski 44
您可以@JvmStatic在随附对象的方法中添加注释,以使Kotlin生成静态方法.
class MainApplication : Application() {
companion object {
@JvmStatic fun get(context: Context): MainApplication {
return context.applicationContext as MainApplication
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以在转换为Kotlin之前从Java访问它:
MainApplication application = MainApplication.get(mContext);
Run Code Online (Sandbox Code Playgroud)
编辑:我觉得有必要添加我最近学到的东西:@JvmStatic实际上并没有移动方法生成的地方.它复制它,通过在除了同伴对象上的方法生成的Java的静态方法.我个人认为这不是很好,它可能会有一些影响取决于用例,所以值得了解.
Ely*_*lye 19
Ops,我明白了.只需使用下面的内容.
MainApplication application = MainApplication.Companion.get(mContext);
Run Code Online (Sandbox Code Playgroud)
通过省略伴随对象的名称,Companion必须使用该名称来访问方法。
例子:
class MyClass1 {
companion object Object1 {
fun method1 {
}
}
}
class MyClass2 {
companion object {
fun method2 {
}
}
}
Run Code Online (Sandbox Code Playgroud)
要调用第一个伴随对象方法,您将执行以下操作:
MyClass1.method1()
Run Code Online (Sandbox Code Playgroud)
调用第二个:
MyClass2.Companion.method2()
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅关于伴随对象的 Kotlin 文档。
| 归档时间: |
|
| 查看次数: |
11164 次 |
| 最近记录: |