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

如何在泛型类A中调用类B的泛型parse方法返回J类型对象?

解决方案:在泛型类A中调用B的parse方法返回J类型对象

由于Java的泛型擦除机制,泛型类A<J>在运行时无法直接获取J的具体类型,必须通过显式传递Class<J>实例的方式解决这个问题。具体实现步骤如下:

  1. 修改泛型类A的定义
    在A的构造器中接收Class<J>参数并保存为成员变量,这样就能在类内部调用B的parse方法时传入正确的类型参数:
class A<J> {
    private final Class<J> targetClass;

    // 构造时传入J对应的Class对象
    public A(Class<J> targetClass) {
        this.targetClass = targetClass;
    }

    // 自定义方法调用B.parse,返回J类型对象
    public J parseFromInput(String input) {
        return B.parse(input, targetClass);
    }
}
  1. 实例化A并使用
    因为实例化A时J的类型在编译期已知,所以可以直接传入对应的Class对象:
// 实例化处理String类型的A对象
A<String> stringProcessor = new A<>(String.class);
String strResult = stringProcessor.parseFromInput("hello world");

// 实例化处理Integer类型的A对象
A<Integer> intProcessor = new A<>(Integer.class);
Integer intResult = intProcessor.parseFromInput("456");

补充说明

如果你的场景中A是通过子类固定泛型参数的(比如class StringA extends A<String>),也可以通过反射获取父类的泛型参数来得到Class<J>,但这种方式代码更复杂,且在一些复杂继承场景下容易出错。相比之下,显式传入Class对象的方式更直观、可靠,是首选方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 08:40:33