[英]How Kotlin will take val as an keyword from java class
在Kotlin中,他們引入了關鍵字val
,並且可以與Java互操作(我們可以從Java訪問函數和成員,反之亦然)。
在Java中沒有關鍵字val
,如果我的代碼在Java中看起來像這樣
class Myclass{
int val =10; //here val is variable name
}
如果我將此課程傳遞給Kotlin班,該怎么辦?
根據文檔 , 如果您的Java標識符是Kotlin中的關鍵字,那么如果將其包裝在反引號中,則仍可以在Kotlin中使用它。
例如,如果您在Java中使用以下代碼:
public class JavaClass {
public static int val = 3;
}
您可以通過以下方式在Kotlin中進行訪問:
fun main(args: Array<String>) {
println(JavaClass.`val`) // prints 3
}
編輯(v2):
從Kotlin到Java的反向轉換Java是嚴格類型的lang,它如何考慮kotlin val關鍵字
如果您的Kotlin標識符是Java關鍵字 ,那么您可能會遇到麻煩。
對於方法, 可以在Kotlin中使用 @JvmName("other-name")
批注來覆蓋方法名稱。
科特林:
class KotlinClass {
@JvmName("otherName")
fun new() {
// ...
}
}
Java的:
public static void main(String[] args) {
KotlinClass.otherName();
}
但是對於領域,AFAIK沒有Kotlin或Java提供的解決方案。
最好不要在程序中使用Kotlin關鍵字或Java關鍵字。
編輯(v1):(誤解了第二個問題,並撰寫了有關如何在Java中使用Kotlin字段的文章)
Kotlin屬性將被視為Java中的getter和setter方法。 用val
聲明的屬性只會有一個吸氣劑。 如果將@JvmField
添加到Kotlin屬性,則可以直接訪問該字段。 ( val
將是預期的最終值)。
科特林:
class KotlinClass {
val a = 1
var b = 2
@JvmField val c = 3
@JvmField var d = 4
}
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);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.