下面的方法不会编译:
public <K extends Middle> K test(K a, K b) {
return a.test(); //a.test() returns Middle
}
如果我们将K
设置为Middle
的子类型,那么应该可以返回Middle
,对吧?
如果我执行以下操作:return (K)a.test();
,它会编译...
最佳答案
If we set K as a subtype of Middle, then Middle should be able to be returned, right?
不,这不安全。以Number
为例。如果Middle
是Number
并且K
是Integer
,a.test()
可以返回一个 Double
作为 Double extends Number
。但是 Double
不是 Integer
,所以这不是类型安全的。
所有的 K 都是 Middle,但不能保证所有的 Middle 都是 K。
关于Java 泛型 - <K extends Middle> - K 是 Middle 的真正子代吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38354637/