1,Kotlin 調用Java
關于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 type | Kotlin type |
---|---|
byte | kotlin.Byte |
short | kotlin.Short |
int | kotlin.Int |
long | kotlin.Long |
char | kotlin.Char |
float | kotlin.Float |
double | kotlin.Double |
boolean | kotlin.Boolean |
Java type | Kotlin type |
---|---|
java.lang.Object | kotlin.Any! |
java.lang.Cloneable | kotlin.Cloneable! |
java.lang.Comparable | kotlin.Comparable! |
java.lang.Enum | kotlin.Enum! |
java.lang.Annotation | kotlin.Annotation! |
java.lang.Deprecated | kotlin.Deprecated! |
java.lang.CharSequence | kotlin.CharSequence! |
java.lang.String | kotlin.String! |
java.lang.Number | kotlin.Number! |
java.lang.Throwable | kotlin.Throwable! |
Edit Page
Java type | Kotlin type |
---|---|
java.lang.Byte | kotlin.Byte? |
java.lang.Short | kotlin.Short? |
java.lang.Integer | kotlin.Int? |
java.lang.Long | kotlin.Long? |
java.lang.Character | kotlin.Char? |
java.lang.Float | kotlin.Float? |
java.lang.Double | kotlin.Double? |
java.lang.Boolean | kotlin.Boolean? |
注意,如果java用了原始類型作為參數,那么在kotlin中轉換為平臺類型,比如:List<java.lang.Integer>
?在kotlin中對應?List<Int!>
?
Kotlin的集合類型可以是只讀的,或者可變的,所以,跟java的集合類型對應關系如下? (下表里面的這些Kotlin 類型都在包?kotlin.collections里
):
Java type | Kotlin read-only type | Kotlin mutable type | Loaded 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 type | Kotlin 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
另外有需要云服務器可以了解下創新互聯cdcxhl.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
本文標題:Kotlin與Java互操作-創新互聯
新聞來源:http://www.yijiale78.com/article8/cdppop.html
成都網站建設公司_創新互聯,為您提供網站營銷、手機網站建設、網站排名、軟件開發、搜索引擎優化、網站策劃
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯