1.2.31版本kotlin中引用java中public static final变量出现错误的问题

现象

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 static final变量出现错误的问题)