Java 调用 Kotlin

4 篇文章 0 订阅

Java 调用 Kotlin

1、kotlin编译后会生成一个 类名 + Kt ,如果不想使用这个名字,可以自己自定义

在文件第一行添加注解 @file:JvmName("名字")
例如 @file:JvmName("Hello")

2、访问顶层属性

var name = "1"

通过 文件名Kt 来调用set/get方法

String name = JavaClassKt.getName();

如果想直接通过 “文件名.属性名” 的方式

  • 方法一: 通过添加@JvmField属性可以做到

    @JvmField
    var name1 = "1"
    
    那么在java里   就可以
    String name1 = JavaClassKt.name1;
    
  • 方法二: 使用 const关键字

    // const 只能用来修饰 val ,相当于java中的 public static final
    const val name2 = "1"
    
    Stringg name2 = JavaClassKt.name2;    
    

3、合并文件

假如有
AUtils.kt,里面有个 a 方法  
 和
 BUtils.kt,里面有个 b 方法

给AUtils.kt设置名字叫Utils(通过@file:JvmName("Utils"))
给BUtils.kt设置名字叫Utils(通过@file:JvmName("Utils"))

这个时候通过Utils调用方法的时候只能调用 a 方法,但是我还想要调用 b 方法

就需要在 @file:JvmName("Utils") 下面添加 @file:JvmMultifileClass,表示可以合并

在AUtils.kt 和 BUtils.kt 里面都添加

4、扩展方法

fun String.test() {}
fun Int.test() {}

在java 中调用的时候需要通过 文件名.test(参数就是扩展类型)
比如
Hello.test("string");
Hello.test(1);

5、相同签名的不同泛型的方法

fun List<String>.test() {}
fun List<Int>.test() {}    

上面这两个方法因为java中的签名一样,都是List,所以有问题

就需要修改下方法名

@JvmName("test1")
fun List<String>.test() {}
fun List<Int>.test() {}

java 中调用

// 相同签名的不同泛型
Hello.test(new ArrayList<Integer>());
Hello.test1(new ArrayList<String>());

6、方法默认值

fun func(name: String = "", id: Int = 1) {} 

kotlin中两个参数都有默认值,在java中调用的话两个参数都需要传

如果在 java 中不传参数的话需要添加注解

@JvmOverloads
fun func(name: String = "", id: Int = 1) {}

这个时候就可以调用了

// 有默认值的方法
Hello.func();
Hello.func("");
Hello.func("", 1);

7、类

class A(name: String) {
    val name1 = name
    @JvmField
    val name2 = name

    companion object AA {
        val id = "2"

        @JvmField
        val sex = "男"
    }
}

java 中调用

// 类
A a = new A("name");
n = a.getName1();
n = a.name2;
String id = A.AA.getId();
String sex = A.sex;        

8、object

object B {
    val id = "1"
}

java 中调用

// object
id = B.INSTANCE.getId();        

9、异常

fun ex() {
    throw IOException("xxx")
}

kotlin 中抛出异常,java 中是没有提示要处理的,如果需要提示可以添加注解

@Throws(IOException::class)
fun ex() {
    throw IOException("xxx")
}

java

// 异常
try {
    Hello.ex();
} catch (IOException e) {
    e.printStackTrace();
}      
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值