Kotlin-2-与Java之间的互调

目录

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的函数是可以写在类的外面的

/**
 * kotlin的函数是可以写在类的外面的,java的不可以,这是因为kt文件编译之后,会变成相当于jvm层次的class文件
 * 1、类中的inside函数可以调用类外的outside函数
 * 2、类外的outside函数不能调用类中的inside函数
 */


   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匿名内部类的写法

文件目录

 

    /*
     * kotlin中的匿名内部类在编译过程中会生成一个INSTANCE的单例对象,
     * 并把自己的构造函数声明为private
     * (这也是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没有静态变量与静态方法

/**
 * 前面我们讲过,调用匿名内部类的函数,可以通过INSTANCE来调用
 * 那么我们怎么实现像Java中调用静态方法的形式用类名直接调用呢
 * 在Kotlin中有一个注解@JvmStatic可是将kotlin方法编译成Java中的静态方法和变量
 */

object InsideClass {

    @JvmStatic
    var name: String = "Zhang San"

    @JvmStatic
    fun writeName(name: String) {
        println("我的名字叫$name")
    }

    fun writeName1(name1: String) {
        println("我的名字叫$name1")
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值