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

如何初始化实现Comparable接口的泛型类以规避原始类型使用

解决方案

你的核心需求是在不修改Unit类的前提下,消除调用代码中的“Raw use of parameterized class”警告,同时保留compareTo()方法的可用性。可以通过指定具体的泛型类型Comparable<?>来实现:

修改后的调用代码

Unit<Comparable<?>> unit1 = new Unit<>();
Map<String, Comparable<?>> params = new HashMap<>();
params.put("First", 123);
params.put("Second", "ABS");
params.put("Third", 'a');

unit1.setParams(params);

// 正常调用compareTo方法
Unit<Comparable<?>> unit2 = new Unit<>();
unit1.compareTo(unit2);

为什么这样可行

  1. 泛型约束匹配:Comparable<?>满足Unit类的泛型约束V extends Comparable<? super V>——所有实现Comparable接口的类型(如Integer、String、Character)都可以向上转型为Comparable<?>,而Comparable<?>的超类型包含Object,符合Comparable<? super V>的要求。
  2. 消除原始类型警告:明确指定Unit的泛型类型为Comparable<?>,不再使用原始类型Unit,同时Map的泛型也改为Comparable<?>,避免了未指定泛型的警告。
  3. 保留compareTo可用性:Unit<Comparable<?>>实现了Comparable<Unit<Comparable<?>>>,因此可以正常调用compareTo()方法,参数类型完全匹配。

为什么之前的通配符尝试会失败

如果使用Unit<?>或Unit<? extends Comparable<?>>这类通配符声明,编译器无法确定Unit的具体泛型类型,导致compareTo()方法的参数类型(需要Unit<V>)无法匹配,从而编译报错。而明确指定V为Comparable<?>则解决了这个类型不确定性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 09:20:06