簡體   English   中英

可變和不可變集合類是相同的 kotlin

[英]Mutable and immutable collection classes are the same kotlin

當使用反射來調查集合類時,相同類型的可變類和不可變類在引用上是相等的。

為什么會這樣?

    @Test
    fun demonstrate_mutableAndImmutableClassesAreTheSame() {
        println("(MutableIterable::class === Iterable::class) = ${(MutableIterable::class === Iterable::class)}")
        println("(MutableCollection::class === Collection::class) = ${(MutableCollection::class === Collection::class)}")
        println("(MutableList::class === List::class) = ${(MutableList::class === List::class)}")
        println("(MutableSet::class === Set::class) = ${(MutableSet::class === Set::class)}")
        println("(MutableMap::class === Map::class) = ${(MutableMap::class === Map::class)}")
        println("(MutableMap.MutableEntry::class === Map.Entry::class) = ${(MutableMap.MutableEntry::class === Map.Entry::class)}")
    }

印刷

(Iterable::class === MutableIterable::class) = true
(集合::class === MutableCollection::class)= true
(列表::class === MutableList::class) = true
(集::class === MutableSet::class) = true

CollectionMutableCollection映射到同一個 java.util.Collection class (映射類型),所以從 JVM 的 POV 來看,它們是相同的運行時。

如果你反編譯你寫的代碼,你會得到這個(我已經使用 Intellij 生成的 Kotlin 字節碼反編譯它):

Kotlin:

fun demonstrate_mutableAndImmutableClassesAreTheSame() {
    println("(MutableCollection::class === Collection::class) = ${(MutableCollection::class === Collection::class)}")
}

Java:

import kotlin.jvm.internal.Reflection;

// class declaration
public static final void demonstrate_mutableAndImmutableClassesAreTheSame() {
    String var0 = "(MutableCollection::class === Collection::class) = " + (Reflection.getOrCreateKotlinClass(Collection.class) == Reflection.getOrCreateKotlinClass(Collection.class));
    boolean var1 = false;
    System.out.println(var0);
}

參考:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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