我有一个接口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
,有什么不对的代码?
“它的作品”,因为它是多余的:你不需要为自己投射一种类型。 –
“编译错误”,因为'T'并不总是'Cls1';它*可能*是'Cls1',但它也可能是它的一个子类。 –
当方法签名中没有使用“T”时,使方法具有通用性(添加'')。 –
Andreas