在Kotlin中,他们引入了一个关键字val,它可以与Java互操作(我们可以从Java访问函数和成员,反之亦然).
在Java中,没有关键字val,如果我的代码在Java中看起来像这样
class Myclass{
int val =10; //here val is variable name
}
Run Code Online (Sandbox Code Playgroud)
如果我将这个传递给Kotlin课程,它是如何进行的?
根据文档,如果您的Java标识符是Kotlin中的关键字,如果您将它包装在反引号中,您仍然可以在Kotlin中使用它.
例如,如果你在Java中有这个:
public class JavaClass {
public static int val = 3;
}
Run Code Online (Sandbox Code Playgroud)
您可以通过这种方式访问Kotlin:
fun main(args: Array<String>) {
println(JavaClass.`val`) // prints 3
}
Run Code Online (Sandbox Code Playgroud)
编辑(v2):
那么从kotlin逆转到java这里java是严格类型的lang,它如何考虑kotlin val关键字
如果您的Kotlin标识符是Java关键字,那么您可能会遇到问题.
对于方法,@JvmName("other-name") 可以在Kotlin中使用注释来覆盖方法名称.
科特林:
class KotlinClass {
@JvmName("otherName")
fun new() {
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
Java的:
public static void main(String[] args) {
KotlinClass.otherName();
}
Run Code Online (Sandbox Code Playgroud)
但对于字段,AFAIK没有Kotlin或Java提供的解决方案.
最好不要在程序中使用Kotlin关键字,也不要使用Java关键字.
编辑(v1):(误解了第二个问题,并总体上写了如何在Java中使用Kotlin字段)
Kotlin属性将被视为Java中的getter和setter方法.声明的属性val只有一个getter.如果添加@JvmField到Kotlin属性,则可以直接访问该字段.(val将是最终的,如预期的那样).
科特林:
class KotlinClass {
val a = 1
var b = 2
@JvmField val c = 3
@JvmField var d = 4
}
Run Code Online (Sandbox Code Playgroud)
Java的:
public static void main(String[] args) {
KotlinClass o = new KotlinClass();
o.getA(); // 1
// o.setA(1); // not exists
o.getB(); // 2
o.setB(1);
o.c; // 3
o.getC(); // 3
// o.c = 1; // compile error
// o.setC(1); // not exists
o.d; // 4
o.getD(); // 4
o.d; = 4
o.setD(1);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
382 次 |
| 最近记录: |