转换为 Kotlin 后如何访问 Java 接口静态变量



我有一个 Java 接口,其中包含静态变量interfaceValue,我可以访问如下

public class Experimenting {
public interface MyInteface {
int interfaceValue = 10;
}
class MyImpl implements MyInteface { }
MyImpl myImpl = new MyImpl();
void testing() {
int getInterfaceValue = myImpl.interfaceValue;
}
}

当我转换为 Kotlin 时,如下所示

class Experimenting {
internal var myImpl = MyImpl()
interface MyInteface {
companion object {
val interfaceValue = 10
}
}
internal inner class MyImpl : MyInteface
internal fun testing() {
val getInterfaceValue = myImpl.interfaceValue
}
}

但是,myImpl.interfaceValue显示编译错误符号,无法识别interfaceValue。我怎样才能在 Kotlin 中访问我的interfaceValue

转换将静态最终interfaceValue转换为companionKotlins 中的val。不幸的是,转换器并不完美,有时会搞砸事情。要访问它

import com.your.package.Experimenting.MyInteface.Companion.interfaceValue    
class Experimenting {
internal var myImpl = MyImpl()
interface MyInteface {
companion object {
const val interfaceValue = 10
}
}
internal inner class MyImpl : MyInteface
internal fun testing() {
val getInterfaceValue = interfaceValue
} 
}

能解决问题。

还做:

class Experimenting {
internal var myImpl = MyImpl()
interface MyInteface {
companion object {
val interfaceValue = 10
}
}
internal inner class MyImpl : MyInteface
internal fun testing() {
val getInterfaceValue = MyInteface.interfaceValue
}
}

第三种方法是将interfaceValue的值复制到实现类中:

class Experimenting {
internal var myImpl = MyImpl()
interface MyInteface {
companion object {
const val interfaceValue = 10
}
}
internal inner class MyImpl : MyInteface{
val interfaceValue = MyInteface.interfaceValue
}
internal fun testing() {
val getInterfaceValue = myImpl.interfaceValue
}
}

基本上,您访问它就像访问java中的静态变量一样。

我想这种 Java 代码到 Kotlin 代码的正确转换应该如下所示

class Experimenting {
internal var myImpl = MyImpl()
interface MyInteface {
val interfaceValue: Int
get() = 10
}
internal inner class MyImpl : MyInteface
internal fun testing() {
val getInterfaceValue = myImpl.interfaceValue
}
}

尽管在语法上它们是不同的,即interfaceValue不再是一个静态变量,但实用性是一样的。

最新更新