我正在尝试将以下代码转换为Kotlin,并且仍然保留Java使用的一个类(Foo)。进行这种转换的正确方法是什么?
原始Java:
public class Foo {
public static final String C_ID = "ID";
public static final String C_NAME = "NAME";
public static final String[] VALUES = {"X", "Y", "Z"};
public static String[] getAll() {
return new String[] {C_ID, C_NAME};
}
}
public class Bar {
public void doStuff() {
String var1 = Foo.C_ID;
String[] array1 = Foo.VALUES;
String[] array2 = Foo.getAll();
}
}
自动将Foo转换为Kotlin
object Foo {
val C_ID = "ID"
val C_NAME = "NAME"
val VALUES = arrayOf("X", "Y", "Z")
val all: Array<String>
get() = arrayOf(C_ID, C_NAME)
}
问题:
Bar类不能再访问C_ID或值(错误:“私有访问”)
如果我把"const“放在C_ID前面,就行了.但我不能对值做同样的事情("const“只能用于原语或字符串)
有没有一种不同的方式(这样Java代码和Kotlin代码都可以访问Foo中的所有内容)?
发布于 2016-12-01 21:24:22
在你的foo类中,你可以把这些属性和方法放在一个伴生对象中:
class Foo {
companion object {
val C_ID:String = "ID"
val C_NAME:String = "NAME"
@JvmField val VALUES = arrayOf("X", "Y", "Z")
fun getAll():Array<String> {
return arrayOf(C_ID, C_NAME)
}
}
}
然后,您可以调用Foo.getAll()以及Foo.C_ID、Foo.C_NAME和Foo.VALUES。
发布于 2016-02-01 04:18:42
您应该能够访问“kotlin方式”的值:
object Foo {
val C_ID = "ID"
val C_NAME = "NAME"
val VALUES = arrayOf("X", "Y", "Z")
val all: Array<String>
get() = arrayOf(C_ID, C_NAME)
}
fun main(args: Array<String>) {
Foo.all.forEach { it->println(it) }
}
结果是:
ID
NAME
Process finished with exit code 0
https://stackoverflow.com/questions/35118514
复制相似问题