2017-09-20 72 views
2

在Kotlin中,它們引入了一個關鍵字val,它可與Java(我們可以從Java訪問函數和成員,反之亦然)進行互操作。Kotlin如何將val作爲java類的關鍵字

在Java中沒有關鍵字val,如果我的代碼看起來像這樣在Java中

class Myclass{ 
    int val =10; //here val is variable name 
} 

如果我通過這一個科特林類,它是如何拍攝?

+0

使用反引號,e.g:'這\'VAL \'' –

回答

5

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); 
} 
+0

@juzaai我的意思'implements'是用Java保留。但有沒有辦法逃避它,或者我們應該防止使用Java的保留字呢? – BakaWaii

+0

@BakaWaii哦,我誤解了,對不起。目前我不知道這種情況下的解決方案(試圖在沒有運氣的情況下使用'@ JvmName')。 – juzraai

+1

@juzraai我明白了。也許我應該簡單地阻止使用它們。 – BakaWaii

相關問題