
與Java的互相調(diào)用
由于Java與Kotlin是100%共通的,所以他們可以進行相互的調(diào)用。那么在Kotlin中聲明了一個函數(shù),在Java中該如何調(diào)用這個函數(shù)呢?
假設(shè)我們在KotlinDemo.kt文件里寫一個Kotlin的函數(shù)
fun getMessage(str:String):String{
return str;
}
這個時候我們又新建一個Java文件名字叫做JavaDemo,那么我們?nèi)绾握{(diào)用在KotlinDemo.kt文件里的getMessage()這個函數(shù)呢?
public static void main(String[] args){
KotlinDemoKt.getMessage("hello world");
}
其實很簡單,我們看到,我們只需要在java文件中用Kotlin中文件中文件名加上需要調(diào)用的函數(shù)名即可以調(diào)用這個函數(shù)。格式為:
Kotlin文件名 . 需調(diào)用函數(shù)名
這樣就可以在Java中調(diào)用Kotlin函數(shù)了。
Kotlin中匿名內(nèi)部類
在Kotlin中也有匿名內(nèi)部類的概念。一般書寫匿名內(nèi)部類,我們都是使用" object + 類型 + 大括號 ",之后再跟上需要寫的函數(shù)來處理。
object Test{
fun sayHello(){
print("hello!!");
}
}
而在Kotlin中使用匿名內(nèi)部類也很簡單,直接使用類型 . 函數(shù)名即可使用
//在kotlin中使用
fun getTest(){
Test.sayHello();
}
而在Java中如何使用呢?其實也非常簡單
//Java中使用Kotlin的匿名內(nèi)部類
public static void main(String[] args){
Test.INSTANCE.sayHello();
}
看到,通過類型 + INSTANCE + 函數(shù)名稱,即可調(diào)用Kotlin中的匿名內(nèi)部類了。這里強調(diào)一下,在Kotlin中是沒有靜態(tài)變量和靜態(tài)方法這個概念的,也就是說Kotlin中沒有static這個關(guān)鍵字。那么如果我們想要在Kotlin中擁有一個類似于Java中public static的方法該怎么辦呢?其實這個也很簡單,我們只需要一個修飾符 @JvmStatic來進行修飾sayHello函數(shù)即可。
object Test{
@JvmStatic
fun sayHello(){
print("hello!!");
}
}
這樣sayHello就變成了靜態(tài)方法,在Java中使用這個方法可以直接使用Test.sayHello() 而不用使用INSTANCE去處理。
kotlin關(guān)鍵字處理
我們知道在Java中關(guān)鍵詞是不能用來作為聲明的變量名來使用的,例如你不能使用if或者static等來作為變量名,而在Kotlin中也是如此。但是在Kotlin中有些關(guān)鍵字在Java中沒有,并不作為關(guān)鍵詞。那么如果在Java中使用了Kotlin里面的關(guān)鍵字在Kotlin中該如何處理呢?
假設(shè),在Java中是沒有in這個關(guān)鍵字的,所以我們在Java中用in來聲明一個變量
//Java中的代碼
public static String in = "this is in";
而在Kotlin中我們需要調(diào)用這個in變量,那么我們可以這么處理
//在Kotlin中代碼
fun getTest(){
print(JavaDemo.`in`);
}
我們看到,我們用兩個反引號來包裹了這個in,兩個反引號代表轉(zhuǎn)義的意思,就像Java中的兩個反斜杠一樣,都是用來轉(zhuǎn)義一些關(guān)鍵字或者特殊符號的作用。
以上就是kotlin與Java在兼容方面需要注意的地方。
封裝類
我們先來看下面代碼
//Java代碼
public static JavaDemo javaDemo = new JavaDemo();
public void getInt(int a){
System.out.println("int");
}
public void getInt(Integer a){
System.out.println("Integer");
}
我們寫了兩個名字相同的方法,并且傳入了不同的參數(shù)類型,一個是基本數(shù)據(jù)類型,一個是封裝類型。那么如果在Kotlin中如何調(diào)用程序會走哪個方法呢?
fun test(){
JavaDemo.javaDemo.getInt(100);
}
//輸出結(jié)果
int
結(jié)果我們發(fā)現(xiàn)他輸出的是第一個結(jié)果int而不是第二個Integer。在Kotlin中其實是沒有封裝類這個概念的,他只有基礎(chǔ)數(shù)據(jù)類型。他的基礎(chǔ)數(shù)據(jù)類型如下:
| 類型 | 字節(jié)數(shù) |
|---|---|
| Double | 64 |
| Float | 32 |
| Long | 64 |
| Int | 32 |
| Short | 16 |
| Byte | 8 |
注意,String并不屬于基礎(chǔ)數(shù)據(jù)類型。這點和Java是一樣的。
數(shù)據(jù)類型的轉(zhuǎn)換
假設(shè)有這么一種情況,需要將一個String類型的轉(zhuǎn)換為Int類型,一般在Java中我們可以使用封裝類來處理
public void test(){
String b = "1";
int i = Integer.parseInt(b);
}
但是在Kotlin中是沒有封裝類的,那么我們?nèi)绾翁幚恚?/p>
var str:String = "1";
var i : Int = str.toInt();
我們可以通過 to + 需要轉(zhuǎn)換的類型來進行類型不同之間的轉(zhuǎn)換。
每個數(shù)字類型支持如下的轉(zhuǎn)換:
toByte(): Byte
toShort(): Short
toInt(): Int
toLong(): Long
toFloat(): Float
toDouble(): Double
toChar(): Char
如果覺得我的文章能夠幫助到你,也歡迎關(guān)注我的微信公眾號「晨雨細曲」,有新技術(shù)和知識會推送在這上面。