现象
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 仍然是原来的状态, 导致了这个问题.
网友评论