为什么在类对象之间转换时需要对象间转换?

zxlwwiss  于 2021-07-03  发布在  Java
关注(0)|答案(0)|浏览(187)

我无意中发现了一段奇怪的代码,虽然我知道它在语义上意义有限,但我很好奇它是如何/为什么这样工作的。为了更清楚,这只是一个复制它的最小示例。
假设我们有以下类: Housing<T> Cave extends Housing Animal 现在有一个方法,我们称之为 setHousing ,它接受 Class<? extends Housing<?>> 作为论据。我们想用我们的 Cave 类,例如:

setHousing(Cave.class);

但是,这会导致编译错误,如 Class<Cave> 不符合 Class<? extends Housing<?>> ,因为编译器不考虑 Cave 一个子类 Housing<?> 由于通用的 <?> (对吗?)。
所以我们试着把这个转换成正确的类型:

setHousing((Class<Housing<?>>) Cave.class);

但这会导致另一个编译错误,即 Cannot cast from Class<Cave> to Class<Housing<?>> . 为什么这不可能?
要想最终成功,我们需要 Object 第一:

setHousing((Class<Housing<?>>) (Object) Cave.class);

这里到底发生了什么事;i、 为什么第三个例子行得通,而第二个却不行?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题