在Kotlin中,它們引入了一個關鍵字val
,它可與Java(我們可以從Java訪問函數和成員,反之亦然)進行互操作。Kotlin如何將val作爲java類的關鍵字
在Java中沒有關鍵字val
,如果我的代碼看起來像這樣在Java中
class Myclass{
int val =10; //here val is variable name
}
如果我通過這一個科特林類,它是如何拍攝?
在Kotlin中,它們引入了一個關鍵字val
,它可與Java(我們可以從Java訪問函數和成員,反之亦然)進行互操作。Kotlin如何將val作爲java類的關鍵字
在Java中沒有關鍵字val
,如果我的代碼看起來像這樣在Java中
class Myclass{
int val =10; //here val is variable name
}
如果我通過這一個科特林類,它是如何拍攝?
According to the documentation,如果您的Java標識符是Kotlin中的關鍵字,則如果您用反引號包裝它,仍然可以在Kotlin中使用它。
舉例來說,如果你有這樣的在Java中:
fun main(args: Array<String>) {
println(JavaClass.`val`) // prints 3
}
EDIT(V2):
public class JavaClass { public static int val = 3; }
您可以用這種方式訪問它在科特林
從kotlin到java的反向怎麼樣java是嚴格類型的lang,它是如何考慮的科特林VAL關鍵字
如果您科特林標識符是一個Java關鍵字,那麼你可能會遇到麻煩。
對於方法,@JvmName("other-name")
annotation can be used in Kotlin覆蓋方法名稱。
科特林:
class KotlinClass {
@JvmName("otherName")
fun new() {
// ...
}
}
的Java:
public static void main(String[] args) {
KotlinClass.otherName();
}
但對於領域,據我所知沒有通過科特林或Java提供的解決方案。
最好不要在程序中使用Kotlin關鍵字和Java關鍵字。
EDIT(V1):(誤解了第二個問題,一般寫了一篇關於如何在Java中使用科特林領域)
科特林屬性將被視爲Java的getter和setter方法。用val
聲明的屬性只有一個getter。如果您將@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);
}
使用反引號,e.g:'這\'VAL \'' –