当前位置:   article > 正文

java kotlinlang_Kotlin与Java互操作

kotlin对接java byte对象

1,Kotlin 调用Javaimport java.util.*

fun demo(source: List) {

val list = ArrayList()

for (item in source) {

list.add(item)

}

for (i in 0..source.size - 1) {

list[i] = source[i] // get and set are called

}

}

关于getter和setter的默认调用import java.util.Calendar

fun calendarDemo() {

val calendar = Calendar.getInstance()

if (calendar.firstDayOfWeek == Calendar.SUNDAY) {  // 调用了getFirstDayOfWeek()

calendar.firstDayOfWeek = Calendar.MONDAY      // 调用了 setFirstDayOfWeek()

}

if (!calendar.isLenient) {                         // 调用了isLenient()

calendar.isLenient = true                      // 调用了setLenient()

}

}

注意,如果一个java属性只有setter,那么Kotlin就无法访问。 Kotlin访问java的属性其实是默认调用了这个属性的getter函数

如果一个java函数是void类型的,那么kotlin调用后获得的返回值类型是Unit

如果一个java函数名用了kotlin的关键字,比如:in,object,is ,那么在kotlin中访问的时候,要给函数名加上' ,foo.`is`(bar)

2,null安全和平台类型

java中的对象很可能是null,kotlin把java对象当做平台类型,对其null安全要求不再那么苛刻val list = ArrayList() // 不需要java的new了

list.add("Item")

val size = list.size

val item = list[0] // 普通java对象,当做平台类型

//当我们调用平台类型的变量时, Kotlin不会在编译阶段就做null安全性检查, 但运行的时候可能会访问失败

item.substring(1) // 编译通过,运行的时候如果item是null就会抛出exception

val nullable: String? = item // 正确

val notNull: String = item // 编译通过,但运行时可能报错

我们不能在代码中显式声明平台类型,为了方便编译阶段检查,我们设定以下记忆符号:T! 意思是 "T 或T?",

(Mutable)Collection! 意思是 "Java collection of T may be mutable or not, may be nullable or not",

Array! 意思是"Java array of T (or a subtype of T), nullable or not"

3,类型对应关系Java typeKotlin typebytekotlin.Byte

shortkotlin.Short

intkotlin.Int

longkotlin.Long

charkotlin.Char

floatkotlin.Float

doublekotlin.Double

booleankotlin.Boolean

Java typeKotlin typejava.lang.Objectkotlin.Any!

java.lang.Cloneablekotlin.Cloneable!

java.lang.Comparablekotlin.Comparable!

java.lang.Enumkotlin.Enum!

java.lang.Annotationkotlin.Annotation!

java.lang.Deprecatedkotlin.Deprecated!

java.lang.CharSequencekotlin.CharSequence!

java.lang.Stringkotlin.String!

java.lang.Numberkotlin.Number!

java.lang.Throwablekotlin.Throwable!

Java typeKotlin typejava.lang.Bytekotlin.Byte?

java.lang.Shortkotlin.Short?

java.lang.Integerkotlin.Int?

java.lang.Longkotlin.Long?

java.lang.Characterkotlin.Char?

java.lang.Floatkotlin.Float?

java.lang.Doublekotlin.Double?

java.lang.Booleankotlin.Boolean?

注意,如果java用了原始类型作为参数,那么在kotlin中转换为平台类型,比如:List在kotlin中对应List

Kotlin的集合类型可以是只读的,或者可变的,所以,跟java的集合类型对应关系如下  (下表里面的这些Kotlin 类型都在包kotlin.collections里):Java typeKotlin read-only typeKotlin mutable typeLoaded platform typeIteratorIteratorMutableIterator(Mutable)Iterator!

IterableIterableMutableIterable(Mutable)Iterable!

CollectionCollectionMutableCollection(Mutable)Collection!

SetSetMutableSet(Mutable)Set!

ListListMutableList(Mutable)List!

ListIteratorListIteratorMutableListIterator(Mutable)ListIterator!

MapMapMutableMap(Mutable)Map!

Map.EntryMap.EntryMutableMap.MutableEntry(Mutable)Map.(Mutable)Entry!

Java'的对应如下:Java typeKotlin typeint[]kotlin.IntArray!

String[]kotlin.Array!

注意: java的static 变量不能作为kotlin companion对象直接访问,必须要带上java类型才可以,比如 java.lang.Integer.toHexString(foo).

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/277427
推荐阅读
相关标签
  

闽ICP备14008679号