目錄
Kotlin與Java之間的互調
1、文法變化
1.1、kotlin的函數是可以寫在類的外面的
1.2、java函數調用kotlin函數
1.3、kotlin匿名内部類的寫法
1.4、對class的調用
2、Kotlin關鍵字處理
2.1、Kotlin中沒有封裝類
2.2、Kotlin類型null值敏感
2.3、Kotlin沒有靜态變量與靜态方法
Kotlin與Java之間的互調
1、文法變化
1.1、kotlin的函數是可以寫在類的外面的
fun outside(who:String) {
//我在類的外面,MainActivity.kt檔案的裡面
println("我是$who")
}
class MainActivity : AppCompatActivity() {
private fun inside() {
//我在類的裡面,
outside("張三")
}
}
1.2、java函數調用kotlin函數
如下圖java函數如果想要調用kotlin中的函數就需要用kotlin 檔案名+Kt 的形式來調用内部的函數。
1.3、kotlin匿名内部類的寫法
檔案目錄
//K_Basis.kt檔案中的内部類
object InsideClass1{
fun sayMessage1(msg:String){
print(msg)
}
}
//MainActivity.kt檔案中的内部類
class MainActivity : AppCompatActivity() {
object InsideClass {
fun sayHello(msg: String) {
print(msg)
}
}
}
//J_Basis.java中調用kotlin内部類的方法
public class J_Basis {
/*
* kotlin中的匿名内部類在編譯過程中會生成一個INSTANCE的單例對象,
* 并把自己的構造函數聲明為private
* (這也是kotlin中單例模式的書寫方式)
*/
public static void main(String[] args) {
MainActivityKt.outside("張三");
MainActivity.InsideClass.INSTANCE.sayHello("hello");
InsideClass1.INSTANCE.sayHello1("hello1");
}
}
1.4、對class的調用
/**
* 1、當調用java的class的時候需要在後面加java标簽
* 2、kotlin調用kotlin類則不需要
*/
fun main() {
testClass(J_Basis::class.java)
testClass1(MainActivity::class)
}
fun testClass(javaClass:Class<J_Basis>){
}
fun testClass1(kotlinClass:KClass<MainActivity>){
}
2、Kotlin關鍵字處理
2.1、Kotlin中沒有封裝類
就比如int的封裝類Integer在kotlin中是沒有,如下圖testInteger()函數的參數Integer類型,但在kotlin中識别出來的類型是Int!這是一種相容類型,kotlin自動将Integer類型轉換成了自己能運作的相容類型。
那麼怎麼實作封裝類呢?可以使用反射來實作封裝類。
public class TestInteger {
public static void testInteger(Integer integer) {
System.out.print("integer=" + integer);
}
public static void testInteger1(int integer) {
System.out.print("integer=" + integer);
}
}
2.2、Kotlin類型null值敏感
2.3、Kotlin沒有靜态變量與靜态方法
object InsideClass {
@JvmStatic
var name: String = "Zhang San"
@JvmStatic
fun writeName(name: String) {
println("我的名字叫$name")
}
fun writeName1(name1: String) {
println("我的名字叫$name1")
}
}