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

Java Optional<Long>调用get()返回Object类型不匹配问题排查

问题原因与解决方案

问题根源

在AssetResponse类中,你定义的asset字段和getAsset()方法返回的是原始类型AssetInterface,未指定泛型参数<T>。当使用原始泛型类型时,Java会触发泛型擦除机制,导致接口中getDuration()方法的返回值从Optional<Long>退化为原始的Optional,调用其get()方法时会返回Object类型,因此无法直接赋值给Long变量,出现类型不匹配错误。

修复方案

有两种适配不同场景的修复方式:

方式1:为AssetResponse指定具体泛型类型

如果AssetResponse中的asset始终是Asset类型(实现了AssetInterface<AssetV1>),可直接将字段和方法返回类型改为AssetInterface<AssetV1>:

public class AssetResponse {
    private AssetInterface<AssetV1> asset;
    
    public AssetInterface<AssetV1> getAsset() {
        return asset;
    }
}

修改后,调用assetResponse.getAsset().getDuration().get()时,getDuration()会明确返回Optional<Long>,get()的结果即为Long类型,可直接赋值。

方式2:将AssetResponse定义为泛型类

如果AssetResponse需要适配不同的AssetInterface实现类,可把AssetResponse改为泛型类:

public class AssetResponse<T> {
    private AssetInterface<T> asset;
    
    public AssetInterface<T> getAsset() {
        return asset;
    }
}

使用时指定泛型参数:

AssetResponse<AssetV1> response = ...;
Long duration = response.getAsset().getDuration().get();

额外语法修正提示

你的代码存在几处基础语法错误,建议一并修正:

  • AssetResponse类定义多了括号:public class AssetResponse() 应改为 public class AssetResponse
  • Asset类的setDuration方法缺少返回类型:需补充为public void setDuration(Optional<Long> duration)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 03:35:07