Pertanyaan Perbedaan antara ByteArray dan Array di kotlin


Saya tidak mengerti mengapa mis. itu java.security.MessageDigest.digest() metode yang dinyatakan sebagai kembali byte[] di Java mengembalikan a ByteArray di Kotlin meskipun Kotlin biasanya tampaknya menelepon byte[] sebuah Array<Byte>.

Misalnya. yang berikut tidak berfungsi:

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

Ketik mismatch: tipe yang disimpulkan adalah ByteArray? tapi Array<Byte>? diharapkan


14
2018-02-26 22:38


asal


Jawaban:


Karena keterbatasan Java, Kotlin memiliki 9 tipe array: Array <...> untuk array referensi (dalam arti JVM) dan 8 tipe array khusus, yaitu IntArray, ByteArray, dll.

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

Alasan utama untuk perbedaan ini adalah kinerja: jika kita tidak mengkhususkan array itu akan menyebabkan banyak tinju / unboxing dan membuat array menjadi lambat. Ini tidak dapat diterima karena satu-satunya alasan seseorang mungkin ingin memilih array atas koleksi adalah kinerja.


27
2018-02-27 09:41



Singkat kata, hanya untuk referensi di masa mendatang.

ByteArray sama byte [] di Jawa
Array <Byte> sama Byte [] di Jawa

Tidak ada manfaat menggunakan salah satu dari yang lain di Kotlin, hanya jika kode tersebut akan diurai ke Java.


6
2018-05-24 21:31