You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Java中判断Kotlin密封类Resource的类型并获取Error的statusCode

解决方案

Kotlin 密封类的子类在Java侧可直接通过instanceof判断类型,对应属性通过Kotlin自动生成的Getter方法访问即可,两种JDK版本适配方案如下:

Java 16及更高版本

Java 16 引入了 instanceof 模式匹配特性,可在类型判断后直接获取转换完成的实例,无需手动强转:

public void processResource(Resource<?> resource) {
    if (resource instanceof Resource.Error error) {
        // 直接读取Error实例属性
        Integer statusCode = error.getStatusCode();
        Throwable exception = error.getException();
        // 错误逻辑处理
    } else if (resource instanceof Resource.Success success) {
        Object data = success.getData();
        // 成功逻辑处理
    }
}

Java 8 ~ Java 15 版本

低版本Java不支持模式匹配,判断类型后手动强转即可:

public void processResource(Resource<?> resource) {
    if (resource instanceof Resource.Error) {
        Resource.Error error = (Resource.Error) resource;
        Integer statusCode = error.getStatusCode();
        Throwable exception = error.getException();
        // 错误逻辑处理
    } else if (resource instanceof Resource.Success) {
        Resource.Success success = (Resource.Success) resource;
        Object data = success.getData();
        // 成功逻辑处理
    }
}

注意事项

  • Kotlin 公开的val属性会自动编译为Java侧对应的Getter方法,直接调用getXxx格式的方法即可读取属性值,无需额外适配。
  • 由于Resource是密封类,仅存在Error和Success两个合法子类,上述两个分支已覆盖所有正常场景,可按需决定是否新增else分支处理异常边界情况。
  • 若明确知晓Success携带的泛型类型,可指定泛型参数避免读取data时的类型转换警告。

内容的提问来源于stack exchange,提问作者Ashley Baker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 10:12:02