Kotlin与Java的共存-Java中调用kotlin代码

170 阅读2分钟

kotlin数据类的调用

kotlin代码:

package com.tianfu.kotlin

/**
 * age成员使用注解不能有get和set方法,只能直接赋值,不能声明private
 */
data class Person(var name:String,@JvmField var age:Int)

java代码

import com.tianfu.kotlin.Person;

public class PersonMain {
    public static void main(String[] args) {
        Person person=new Person("Andy",27);
        System.out.println(person.getName()+" is "+person.age);//此处age没有get和set方法
        person.setName("Boby");
        person.age=37;
        System.out.println(person.getName()+" is "+person.age);
//        person.setName(null);此处不能置空,运行会报错
    }
}

结果:
这里写图片描述

Kotlin中object单利模式类的调用

kotlin代码:

package com.tianfu.kotlin

object Singleton {
    fun syhello(){
        println("秦时明月之沧海横流")
    }
}

java代码

import com.tianfu.kotlin.Singleton;

public class AccessToObject {
    public static void main(String[] args) {
        Singleton.INSTANCE.syhello();
    }
}

Kotlin中file类的调用

kotlin代码

package com.tianfu.kotlin

/**
 * kotlinFile中编译会把File编译成对应的class
 */
fun printHello(){
    println("沧海横流,方显英雄本色")
}

fun main(args: Array<String>) {
    printHello()
}

Java代码的调用

import com.tianfu.kotlin.PackageKt;

public class CallPackageMethod {
    public static void main(String[] args) {
        PackageKt.printHello();//将package的kotlinfile编译成class,然后调方法
    }
}

jvm注解的调用,灵活传参

kotlin注解代码

package com.tianfu.kotlin

class OverLoads {
    @JvmOverloads//添加此注释方法参数会有默认值,不否则三个参数在java中都要传
    fun overloaded(a:Int,b:Int=0,c:Int=1){
        println("$a,$b,$c")
    }
}

Java调用代码

import com.tianfu.kotlin.OverLoads;

public class AccessToOverLoads {
    public static void main(String[] args) {
        OverLoads overLoads=new OverLoads();
        overLoads.overloaded(10,11,12);//带三个参数的方法
        overLoads.overloaded(13);//b,c使用默认值
        overLoads.overloaded(12,13);//c使用默认值
    }
}

String字符串判空的调用

kotlin代码

package com.tianfu.kotlin

fun String.notEmpty():Boolean{//没有参数
    return this !=""
}

Java代码实现判空,直接传参

import com.tianfu.kotlin.ExtensionMethodKt;

public class CallExtensionMethod {
    public static void main(String[] args) {
        System.out.println(ExtensionMethodKt.notEmpty("天青色等烟雨"));
    }
//    结果:true
}