31

Kotlin では通常anを呼び出すように見えますが、Java で返すjava.security.MessageDigest.digest()と宣言されているメソッドが Kotlin で a を返す理由がわかりません。byte[]ByteArraybyte[]Array<Byte>

たとえば、次は機能しません。

fun main(args : Array<String>) {
  val md = java.security.MessageDigest.getInstance("SHA")
  if (md == null) throw NullPointerException()
  val result : Array<Byte>? = md.digest() 
}

型の不一致: 推測された型ですByteArray?が、Array<Byte>?予期されていました

4

2 に答える 2

44

Java の制限により、Kotlin には 9 つの配列型があります。(JVM の意味での) 参照の配列用の Array<...> と 8 つの特殊な配列型 (IntArray、ByteArray など) です。

https://kotlinlang.org/docs/reference/java-interop.html#java-arrays

この違いの主な理由はパフォーマンスです。配列を特化していないと、多くのボックス化/ボックス化解除が発生し、配列が遅くなります。コレクションよりも配列を優先する唯一の理由はパフォーマンスであるため、これは受け入れられません。

于 2012-02-27T09:41:04.533 に答える