亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Kotlin與Java互操作

發布時間:2020-09-29 18:24:36 來源:網絡 閱讀:469 作者:北京看看 欄目:開發技術

1,Kotlin 調用Java

import?java.util.*

fun?demo(source:?List<Int>)?{
????val?list?=?ArrayList<Int>()????
????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<String>()?//?不需要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<T>!?意思是 "Java collection of?T?may be mutable or not, may be nullable or not",

  • Array<(out) T>!?意思是"Java array of?T?(or a subtype of?T), nullable or not"


3,類型對應關系

Java typeKotlin type
bytekotlin.Byte
shortkotlin.Short
intkotlin.Int
longkotlin.Long
charkotlin.Char
floatkotlin.Float
doublekotlin.Double
booleankotlin.Boolean

?


Java typeKotlin type
java.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!

?

Edit Page


Java typeKotlin type
java.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<java.lang.Integer>?在kotlin中對應?List<Int!>?

Kotlin的集合類型可以是只讀的,或者可變的,所以,跟java的集合類型對應關系如下? (下表里面的這些Kotlin 類型都在包?kotlin.collections里):

Java typeKotlin read-only typeKotlin mutable typeLoaded platform type
Iterator<T>Iterator<T>MutableIterator<T>(Mutable)Iterator<T>!
Iterable<T>Iterable<T>MutableIterable<T>(Mutable)Iterable<T>!
Collection<T>Collection<T>MutableCollection<T>(Mutable)Collection<T>!
Set<T>Set<T>MutableSet<T>(Mutable)Set<T>!
List<T>List<T>MutableList<T>(Mutable)List<T>!
ListIterator<T>ListIterator<T>MutableListIterator<T>(Mutable)ListIterator<T>!
Map<K, V>Map<K, V>MutableMap<K, V>(Mutable)Map<K, V>!
Map.Entry<K, V>Map.Entry<K, V>MutableMap.MutableEntry<K,V>(Mutable)Map.(Mutable)Entry<K, V>!

Java'的對應如下:

Java typeKotlin type
int[]kotlin.IntArray!
String[]kotlin.Array<(out) String>!

注意: java的static 變量不能作為kotlin?companion?對象直接訪問,必須要帶上java類型才可以,比如?java.lang.Integer.toHexString(foo).

參考文獻:https://kotlinlang.org/docs/reference/java-interop.html




向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

通许县| 读书| 青铜峡市| 亳州市| 察隅县| 海阳市| 涟水县| 新源县| 江门市| 南皮县| 南安市| 乐至县| 方正县| 炎陵县| 阳春市| 尖扎县| 海原县| 务川| 新绛县| 双城市| 恩施市| 九龙县| 锦屏县| 金川县| 原阳县| 平远县| 上饶市| 古交市| 黄陵县| 通山县| 崇明县| 城固县| 洛阳市| 榆中县| 高雄市| 保靖县| 唐山市| 儋州市| 航空| 建宁县| 绵阳市|