2012-02-26 142 views
14

我不明白为什么,例如在Java中声明为返回byte[]java.security.MessageDigest.digest()方法返回Kotlin中的ByteArray,但Kotlin通常似乎称为byte[]Array<Byte>ByteArray和数组之间的差异<Byte> in kotlin

E.g.以下不工作:

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>?预计

+0

Kotlin数组的当前文档:https://kotlinlang.org/docs/reference/basic-types.html#arrays以及与Kotlin的Java数组互操作:https://kotlinlang.org/docs/reference/java -interop.html#java-arrays – 2015-12-29 04:54:11

回答

25

由于Java的限制,科特林有9种数组类型:数组< ...>为引用的阵列(在JVM的意义上)和8种专门的数组类型,即IntArray,字节数组等

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

的主要原因是这种区别的表现:如果我们没有专门化数组会导致大量的装箱/拆箱和数组变慢。这将是不可接受的,因为人们可能想要数组超过集合的唯一原因是性能

4

简而言之,仅供将来参考。

的ByteArray等于字节[]中的Java
阵列<字节>等于字节[]在Java中

使用了另一种在科特林没有益处,只有当代码要被解析为Java时。

+0

使用ByteArray有一个好处,每个条目都是一个原语,所以ByteArray需要更少的内存并且可能会节省一些自动装箱。 – Andy 2018-01-17 03:37:19