Kotlin enum类与companion设计的不协调--NPE导致ClassNotFoundException, Could not initialize class.

在Kotlin 1.1.0环境中,将原本的Java enum类转换为Kotlin时,由于Kotlin使用companion object代替静态成员,可能导致运行时错误。当enum实例尝试访问companion object的字段时,由于companion对象尚未初始化,产生NPE,进而引发ClassNotFoundException。解决方案包括将companion object移到单独的类或回归Java实现。
摘要由CSDN通过智能技术生成

环境: JDK8+kotlin 1.1.0
构建工具:Maven 3

项目中有一个定义报警类型的enum类最开始使用java编写, 后来改成了kotlin. IDE和编译都没有提示错误, 运行时却发现错误.ClassNotFoundException, Could not initialize class.

原来是kotlin使用companion代替static, 而enum类是在类初始化时就初始化实例, 如果在enum实例中引入到了companion object中的字段, ide和编译器都不会提示错误, 但是运行那么就会导致enum类初始化失败. 因为初始化实例时, companion object还没有初始化. 引用其字段, 导致NPE, 类初始化失败, 导致ClassNotFoundException, Could not initialize class.

Java代码

public enum AlarmType {
    MEMORY("memory", AlarmType.CONTAINER_TYPE, true),
    CPU("cpu", AlarmType.CONTAINER_TYPE, true);

    public static final int DEFAULT_TYPE = 0;
    public static final int CONTAINER_TYPE = 1;
    public static final int DOCKER_DAEMON_TYPE = 2;
    public static final i
问题: Could not initialize class org.jetbrains.kotlin.com.intellij.pom.java.LanguageLevel是什么原因引起的? 回答: 这个错误通常是由于缺少Kotlin插件或插件版本不兼容引起的。根据引用\[1\]和引用\[2\]的信息,可能是由于编译过程中无法初始化org.jetbrains.kotlin.com.intellij.pom.java.LanguageLevel导致的。为了解决这个问题,可以尝试更新Kotlin插件的版本。根据引用\[3\]中的配置示例,可以在顶层的build.gradle文件中添加对应的Kotlin插件版本号,例如ext.kotlin_version = '1.6.21'。然后重新编译项目,应该能够解决这个问题。 #### 引用[.reference_title] - *1* [java.lang.NoClassDefFoundError: Could not initialize class org.jetbrains.kotlin.com.intellij.pom.jav](https://blog.csdn.net/qq_35091074/article/details/131475886)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [could not initialize class org.jetbrains.kotlin.gradle.plugin.sources.defaultkotlinsourcesetkt解决...](https://blog.csdn.net/weixin_43762870/article/details/122441424)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Androidstudio报错:Could not initialize org.jetbrains.kotlin.gradle.internal](https://blog.csdn.net/u010164190/article/details/129206252)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值