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

如何修复Web3J中‘Raw use of parameterized class 'Type'’警告?

问题描述

依赖信息

<dependency>
    <groupId>org.web3j</groupId>
    <artifactId>core</artifactId>
    <version>4.10.3</version>
</dependency>

代码场景

Function function = new Function(
    "functionName",
    List.of(),
    List.of(
        new TypeReference<DynamicArray<Uint112>>(){},
        new TypeReference<DynamicArray<Uint112>>(){},
        new TypeReference<DynamicArray<Uint160>>(){},
        new TypeReference<DynamicArray<Uint24>>(){}
    )
);

// 此处触发警告:Raw use of parameterized class 'Type'
List<TypeReference<Type>> outputParams = function.getOutputParameters();

代码运行正常,但上述最后一行存在原始类型使用警告,需要消除该警告的合理方案。


解决方案

方案1:使用通配符匹配任意类型

Function.getOutputParameters()的实际返回类型是List<TypeReference<?>>,直接用这个类型接收即可消除警告,这也是最贴合方法定义的写法:

List<TypeReference<?>> outputParams = function.getOutputParameters();

如果需要明确约束为Type的子类,也可以写成:

List<TypeReference<? extends Type>> outputParams = function.getOutputParameters();

两种写法都能避免原始类型的使用,同时保留代码的灵活性。

方案2:泛型方法约束具体类型

如果后续需要对输出参数做类型安全的操作,可以通过泛型方法来明确类型范围,避免强制转换带来的警告:

@SuppressWarnings("unchecked")
private <T extends Type> List<TypeReference<T>> getTypedOutputs(Function function) {
    return (List<TypeReference<T>>) function.getOutputParameters();
}

// 调用示例(根据实际返回类型调整泛型参数)
List<TypeReference<DynamicArray<?>>> outputParams = getTypedOutputs(function);

这里的@SuppressWarnings("unchecked")是基于你对合约返回类型的预先了解添加的,确保类型转换的安全性。

原理说明

警告的根源是Type是泛型类,TypeReference<Type>属于未指定泛型参数的原始类型用法。通过通配符或泛型约束,让编译器明确类型的边界,从而消除警告同时保证类型安全。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 18:05:13