如何在泛型类A中调用类B的泛型parse方法返回J类型对象?
解决方案:在泛型类A中调用B的parse方法返回J类型对象
由于Java的泛型擦除机制,泛型类A<J>在运行时无法直接获取J的具体类型,必须通过显式传递Class<J>实例的方式解决这个问题。具体实现步骤如下:
- 修改泛型类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); } }
- 实例化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
相关产品推荐
相关产品推荐

