Java泛型 - <K extends Middle> - K是中间人真正的孩子吗?

hrs*_*hrs 1 java generics inheritance

以下方法无法编译:

public <K extends Middle> K test(K a, K b) {

        return a.test(); //a.test() returns Middle
}
Run Code Online (Sandbox Code Playgroud)

如果我们设置K为子类型Middle,那么Middle应该可以返回,对吧?

如果我执行以下操作:return (K)a.test();,它编译...

Mar*_*ers 7

如果我们将K设置为Middle的子类型,那么Middle应该可以返回,对吧?

不,这不安全.以Number作为一个例子.如果MiddleNumber,KInteger,a.test()可以返回Doubleas Double extends Number.但Double不是Integer,所以这不是类型安全的.

所有Ks都是Middles,但并不能保证所有的Mids都是Ks.