kotlin 备忘( java 的final static 常量转换为kotlin 的正确姿势)

本文探讨了从Java到Kotlin中如何正确地将final static常量转换为Kotlin的const val形式,以确保在Java和Kotlin之间能够无缝交互。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、概述

java 和kotlin 混合编码已经一段时间了,java中经常在类(或者interface)里写 public final static 常量来代替枚举。
java 的final static 常量转换为kotlin 时,直接用IDE 自动转转的是不够好的。特此记录下

2、结论

java 的final static 常量转换为kotlin 时,要加上 const 关键字,单纯val 修饰是不够的。(java 调用kotlin 的时候就体现出来了,kotlin调用kotlin 体现不出来)
虽然:
1. final 相对 kotlin 的 val (val多了未赋值可赋值一次)。
2. static 相对 kotlin 的 用伴生对象

3、示例

3.1 自动转换的问题

//java中的目标类
public class Logic {

    public final static int INDEX_1 = 1;
    public final static int INDEX_2 = 2;
}


//自动转换后的kotlin 类 有两种方式。下文用方式2进行描述,类比效果一样
//1
object LogicK {


    val INDEX_1 = 1
    val INDEX_2 = 2
}

//2
class LogicK2 {

    companion object {
        val INDEX_1 = 1
        val INDEX_2 = 2
    }

}

问题:

//kotlin中直接调用 LogicK2 是ok 的没问题
object TestK {
    @JvmStatic
    fun main(args: Array<String>) {

        //普通 赋值
        val value = LogicK2.INDEX_1

        //常量判断
        val index = 1
        when (index) {
            LogicK2.INDEX_1 -> {
            }
        }
    } 
}

//java 中这时候调用LogicK2,赋值是没问题的,但是swich 常量的时候就编译不过去,提示不是常量。而且也不能无缝不改代码的直接调用 
//不能直接调用 LogicK2.INDEX_1
public class Test {

    public static void main(String[] args) {

        //普通 赋值
        int value = LogicK2.Companion.getINDEX_1();

        //常量判断
        int index = 1;

        switch (index){
            case LogicK.INSTANCE.getINDEX_1():

                break;
        }
    }
}

正确姿势:

class LogicK2 {

    companion object {
       const val INDEX_1 = 1
       const val INDEX_2 = 2
    }
}

//正确调用
object TestK {

    @JvmStatic
    fun main(args: Array<String>) {

        //普通 赋值
        val value = LogicK2.INDEX_1
        //常量判断
        val index = 1
        when (index) {
            LogicK2.INDEX_1 -> {
            }
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值