android kotlin详解(2)

这篇博客,我思来想去讲kotlin什么呢?然后想想,还是先从简单的入手,就讲java 调用kotlin时,设计到的一些注释。

(1)@JvmField:如果需要在 Java 中将 Kotlin 的属性作为字段暴露,那就需要使用 @JvmField 注解对其标注。例如:

class User {
    var age: Int;
    var sex: String;

    constructor(name: String, age: Int, sex: String) {
        this.sex = sex;
        this.age = age;
    }
}

那,在java类中,怎么获取 age 成员变量的值呢?

 User user=new User("jimTrency",28,"男");
 user.getAge()

如果:你想直接调用呢?如:user.age

解决方法,在对应的kotlin类对应的字段添加对应的注释就行了。

@JvmField var age: Int;

ps: lateinit 修饰符 和 const 修饰符。也可将 Kotlin的属性作为字段暴露出来。

(2)@JvmStatic

class User {
    var age: Int;
    var sex: String;

    constructor(name: String, age: Int, sex: String) {
        this.sex = sex;
        this.age = age;
    }

     companion object {
        fun foo(): String {
            return "haha";
        }
    }

}

在java类中,怎么调用foo()函数呢?如下:

 User user=new User("jimTrency",28,"男");
 user.Companion.foo();
 //User .Companion.foo();//这样调用也行

那,我想这么调用呢?User .foo();该怎么做,不说你们肯定也知道了。

companion object {
   @JvmStatic fun foo(): String {
        return "haha";
    }
}

ps:这个注释 @JvmStatic, 在Kotlin类中, 只可以为命名对象或伴生对象中定义的函数生成静态方法。

(3)@JvmName :解决签名冲突

fun List<String>.filterValid(){}

@JvmName("filterValidInt")
fun List<Int>.filterValid(){}

(4)@JvmOverloads : 使Java 调用该函数时暴露多个重载

@JvmOverloads fun f(a: String, b: Int = 0, c: String = "jimTrency") {

}   

在java类调用时,呈现的状态:

// Java
void f(String a, int b, String c) { }
void f(String a, int b) { }
void f(String a) { }

(5)@Throws :Kotlin 没有受检异常。 所以,通常 Kotlin 函数的 Java 签名不会声明抛出异常。 于是如果我们有一个这样的 Kotlin 函数:

fun testThrow(){
    throw Exception()
}

在java类中调用:(user:为User类的对象,里面有testThrow()函数)

try {
        user.testThrow();

    }catch (Exception e){

    // 错误:testThrow() 未在 throws 列表中声明 Exception
        e.printStackTrace();
    }

那怎么解决这个问题呢?sb,就知道添加对应的注释,就ok了。

@Throws
fun testThrow(){
    throw Exception()
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值