我有一个界面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
,此代码出了什么问题?
答案 0 :(得分:0)
下面的代码在intellij中编译w / o错误。
interface Int1{}
class Cls2<T>{}
class Cls1 implements Int1 {}
private <T extends Int1> void test(Cls2<Cls1> arg1) {
Cls2<Int1> test1 = (Cls2<Int1>)(Cls2<?>)arg1;
Cls2<T> test2 = (Cls2<T>) arg1;
}
在java中,由子类和超类参数化的类不相关。您需要先转换为<?>
。
总的来说,如果我上面的内容正确地反映了你的代码,那么泛型的使用就非常奇怪了。请确保您的设计正确。