美文网首页
1.2.31版本kotlin中引用java中public sta

1.2.31版本kotlin中引用java中public sta

作者: 叽哩叽哩鸡 | 来源:发表于2018-05-14 15:57 被阅读29次

    现象

    java中

    private static fianal IS_RELEASE = true;
    public static fianal BASE_URL = IS_RELEASE ? "A" : "B";
    

    kotlin中

    Log.i("a", BASE_URL)
    

    第一次运行, 显示A;
    然后把 IS_RELEASE 改成 false, 再次运行, 会发现显示的还是A.


    解决办法

    先说解决办法, 再分析原因吧.

    • 干脆点, 把 kotlin 重写成 java
    • 把 kotlin 版本降低到 1.2.21
    • 每次修改了 IS_RELEASE 后, clean project 或者手动删除 build 文件夹内的内容

    原因分析

    尝试了多种方式, 发现都没有效果:

    • 每次运行前, 先卸载app >>>> 没有效果
    • kotlin类尝试了各种类型的单例以及非单例模式 >>>> 没有效果
    • 尝试把两个public static final 变量写成 kotlin >>>> 报错, 不允许这样写

    通过第三个尝试, 大体猜到了原因:
    新版本的 kotlin 为了加快编译速度, 编译文件中的未曾改动代码的 public static final 变量 就不会再次编译了, 虽然 BASE_URL 引用的 IS_RELEASE 已经发生了变化, 但是 BASE_URL 本身的代码没有变动, 导致再次运行时 IS_RELEASE 仍然是原来的状态, 导致了这个问题.

    相关文章

      网友评论

          本文标题:1.2.31版本kotlin中引用java中public sta

          本文链接:https://www.haomeiwen.com/subject/rtkjdftx.html