簡體   English   中英

Kotlin如何將val作為Java類中的關鍵字

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM