java将子类型强制转换为定义为泛型的类型
我有一个接口Int1
。我有一个类Cls1
实现Int1
。和泛型类Cls2<Cls1>
现在我在写一个方法:
private void <T extends Int1> test(Cls2<Cls1> arg1) {
...
//I try to cast a Cls2<Cls1> into a Cls2<Int1>: it works
Cls2<Int1> test1 = (Cls2<Int1>) arg1;
//I try to cast a Cls2<Cls1> into a Cls2<T>: doesn't work
Cls2<T> test2 = (Cls2<T>) arg1; //compilation error
}
考虑到T
扩展了Int1
,这段代码有什么问题
# 1 楼答案
下面的代码编译intellij中的w/o错误
在java中,由子类和超类参数化的类是不相关的。您需要先强制转换为
<?>
总的来说,如果我上面的内容正确地反映了您的代码,那么泛型的使用是非常奇怪的。请确保您的设计是正确的