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

来源:互联网 发布:淘宝网集市消保卖家 编辑:程序博客网 时间:2024/06/05 08:25

    • kotlin调用javabean数据实体类
    • kotlin的空安全问题
    • 空安全限定不能为NULL
    • kotlin和java中泛型的差异问题
    • SAMConversion在kotlin中调用java的坑

kotlin调用javabean数据实体类

javabean实体类

public class DataClass {    private int id;    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }}

kotlin中的调用赋值:

fun main(args: Array<String>) {    val data=DataClass()    data.id=1//直接把java中的getset方法转换成了kotlin中的属性    println(data.id)//    结果:1}

kotlin的空安全问题

java中返回值为null的方法

public class NullSafetyJava {    public  String getData(){        return  null;    }}

kotlin代码的调用

fun main(args: Array<String>) {    val nullSafety=NullSafetyJava()    val data=nullSafety.data    println(data)//    结果:null    val data1:String=nullSafety.data    println(data1)//    此时限定了data必须是String类型,不能为null,此处就会报错}

空安全限定不能为NULL

Java代码

import com.sun.istack.internal.NotNull;import java.text.SimpleDateFormat;import java.util.Date;public abstract class NullSafetyAbsClass {    public abstract String formate(Date date);    public @NotNull String formatTime(@NotNull Date date) {//注解表示传入的date参数一定不能为null        return new SimpleDateFormat("HH:mm:dd").format(date);    }}

kotlin代码

import java.util.*class NullSafetySubClass : NullSafetyAbsClass() {    override fun formate(date: Date?): String {        return date.toString()    }}fun main(args: Array<String>) {    val nullSafetySubClass = NullSafetySubClass()    println(nullSafetySubClass.formate(Date()))    println(nullSafetySubClass.formatTime(Date()))    /**     * 结果:     * Thu Dec 07 12:03:31 GMT+08:00 2017       12:03:07     */}

kotlin和java中泛型的差异问题

java代码

import java.util.ArrayList;import java.util.List;public class Generics {    //    安卓中的MVP的绑定,kotlin中写不出这样的代码    public abstract class View<P extends Presenter> {        P presenter;    }    public abstract class Presenter<V extends View> {        V view;    }    public static void main(String[] args) {        List list = new ArrayList();//这里可以不用传泛型        list.add("Java");        list.add(12);        for (Object o : list) {            System.out.println(o);        }    }//    结果://           Java//           12}

kotlin中泛型的格式

fun main(args: Array<String>) {    val list=ArrayList<Any>()//此处泛型不能为空,any表示Object    list.add("Java")    list.add(34)    list.map (::println)    /**     * 结果:     * Java       34     */}

SAMConversion在kotlin中调用java的坑

java代码

import java.util.ArrayList;public class SAMInJava {    private ArrayList<Runnable> runnables=new ArrayList<>();    public void addTask(Runnable runnable){        runnables.add(runnable);        System.out.println("After add: "+runnable+" we have "+runnables.size()+" in all.");    }    public void removeTask(Runnable runnable){        runnables.remove(runnable);        System.out.println("After remove: "+runnable+" only "+runnables.size()+" left.");    }}

kotlin代码的使用

import java.util.concurrent.Executorsfun main(args: Array<String>) {    val worker= Executors.newCachedThreadPool()    worker.execute {        println("hello,线程池")    }    val samInJava=SAMInJava()    val lanaba={        println("hello")    }    //每次传的lanaba都会在java中被转换(conversion)成Runable接口的实例,每个地址都不一样    samInJava.addTask(lanaba)    samInJava.addTask(lanaba)    samInJava.addTask(lanaba)    samInJava.addTask(lanaba)    samInJava.addTask(lanaba)    samInJava.removeTask(lanaba)    samInJava.removeTask(lanaba)    samInJava.removeTask(lanaba)    samInJava.removeTask(lanaba)    samInJava.removeTask(lanaba)    /**     * 结果,并没有移除     *///    After add: SAMConversionKt$sam$Runnable$28f07624@548a9f61 we have 1 in all.//    After add: SAMConversionKt$sam$Runnable$28f07624@1753acfe we have 2 in all.//    After add: SAMConversionKt$sam$Runnable$28f07624@7c16905e we have 3 in all.//    After add: SAMConversionKt$sam$Runnable$28f07624@2a2d45ba we have 4 in all.//    After add: SAMConversionKt$sam$Runnable$28f07624@2a5ca609 we have 5 in all.//    After remove: SAMConversionKt$sam$Runnable$28f07624@20e2cbe0 only 5 left.//    After remove: SAMConversionKt$sam$Runnable$28f07624@68be2bc2 only 5 left.//    After remove: SAMConversionKt$sam$Runnable$28f07624@28feb3fa only 5 left.//    After remove: SAMConversionKt$sam$Runnable$28f07624@675d3402 only 5 left.//    After remove: SAMConversionKt$sam$Runnable$28f07624@51565ec2 only 5 left.}
原创粉丝点击