无法将子类对象返回到Java中的泛型超类返回类型

无法将子类对象返回到Java中的泛型超类返回类型,java,generics,inheritance,Java,Generics,Inheritance,我必须实现一个方法,其中我有一个超类(泛型)作为返回类型,并且我必须返回一个特定的子类(非泛型)对象。 我的方法是 private <A extends ClassA<B>, B> SuperClass<A,B> methodA(){ subclass sc = new subclass(); return sc; } private超类methodA(){ 子类sc=新的子类(); 返回sc; } 编译器抱怨无法将子类转换为超类 如果我将

我必须实现一个方法,其中我有一个超类(泛型)作为返回类型,并且我必须返回一个特定的子类(非泛型)对象。 我的方法是

private <A extends ClassA<B>, B>  SuperClass<A,B>  methodA(){
   subclass sc = new subclass();
   return sc;
}
private超类methodA(){
子类sc=新的子类();
返回sc;
}
编译器抱怨无法将子类转换为超类

如果我将其类型转换为超类,它会以未选中从子类转换为超类的方式向我发出警告

我试过的另一种方法是

private <SC extends SuperClass<A,B>, A extends ClassA<B>, B> SC methodA(){
   subclass sc = new subclass();
   return sc;
}
private SC methodA(){
子类sc=新的子类();
返回sc;
}
它仍然给我同样的错误:无法从子类转换到SC

最后我试了一下

private <SC extends SuperClass<A,B>, A extends ClassA<B>, B> SC methodA(){
   SC sc = (SC)new subclass();
   return sc;
}
private SC methodA(){
SC=(SC)新的子类();
返回sc;
}
现在有一个警告未经检查的演员

我的子类声明

 subclass extends SuperClass<ClassC, ClassD>
 where ClassC extends ClassA and ClassD is a concrete type.
 class SuperClass<A extends ClassA<B>, B>
子类扩展了超类
其中ClassC扩展了ClassA,ClassD是一个具体类型。
我的超类声明

 subclass extends SuperClass<ClassC, ClassD>
 where ClassC extends ClassA and ClassD is a concrete type.
 class SuperClass<A extends ClassA<B>, B>
类超类

有谁能告诉我为什么我们不能将子类型对象返回到泛型超类,为什么没有无警告的方法来执行此操作?

您的代码没有意义。大概,
子类
使用特定参数扩展了
超类
,否则它本身就是泛型的。(或者,它可以从原始版本继承,这在逻辑上相当于为两个参数传递
Object

这意味着
子类
可以使用这些特定参数安全地转换为
超类
。将其转换为任何其他版本的
超类
都是错误的

编译器告诉您,您的代码是错误的,而编译器是正确的。重新考虑你的设计

编辑以澄清:

假设我有这样的代码:

public class ClassE {}
public class ClassF extends ClassA<ClassE> {}

SuperClass<ClassF, ClassE> sc = someobject.<ClassF, ClassE>methodA();
公共类{}
公共类ClassF扩展了ClassA{}
超类sc=someobject.methodA();
现在这段代码可以编译了,因为它有正确的类型。但是如果您的代码没有产生错误或警告,那么
sc
现在将指向一个
子类
,它不扩展
超类
,而是扩展了
超类
,这是不同的。希望此代码正常工作是错误的


我怀疑你有XY问题。你真正想解决的问题是什么?因为您启动的解决方案不起作用。

是的,我的子类使用A和B子类扩展超类。声明作为子类扩展超类,其中C扩展A和D是一个具体类型。您可以同时添加超类和子类的类头吗?ClassC扩展ClassA吗?如果不是这样,您就是在打破子类中允许的超类界限。