に関する学習



@ jvmmultifileClassは何ですか?
JvmMultiFileClass注釈は次のように記述されます.

Instructs the Kotlin compiler to generate a multifile class with top-level functions and properties declared in this file as one of its parts. Name of the corresponding multifile class is provided by the JvmName annotation.


https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.jvm/-jvm-multifile-class/
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.jvm/-jvm-name/

分解しましょう
utilsを作成します.そして、fooメソッドを定義します.fooメソッドはfooを出力します.
// Utils.kt

fun foo() {
    println("foo")
}
復元されると、このようになります.
// Utils.decompiled.java

public final class UtilsKt {
   public static final void foo() {
      String var0 = "foo";
      boolean var1 = false;
      System.out.println(var0);
   }
}
@ jvmnameと@ jvmmultifileClassを加えましょう.
// Utils.kt

@file:JvmName("NewUtils")
@file:JvmMultifileClass

fun foo() {
    println("foo")
}
分解しましょう.@ jvmnameアノテーションにnewutilsを指定し、newutilsクラスを生成しました.また、ファサードクラス(newutilsshrum utilskt)が生成されている.
// Utils.decompiled.java

public final class NewUtils {
   public static final void foo() {
      NewUtils__UtilsKt.foo();
   }
}

final class NewUtils__UtilsKt {
   public static final void foo() {
      String var0 = "foo";
      boolean var1 = false;
      System.out.println(var0);
   }
}
指定した場合@file: JvmName("NewUtils") 複数のファイルを出力すると、次のエラーが発生します.Duplicate JVM class name 'NewUtils' generated from: package-fragment, package-fragmentこれは@ jvmmultifileclassを追加することで解決できますJvmMultiFileClass注釈は、ファサードクラスを生成して整理するために使用できます.