Java 泛型 - <K extends Middle> - K 是 Middle 的真正子代吗?

标签 java generics inheritance

下面的方法不会编译:

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为例。如果MiddleNumber并且KIntegera.test()可以返回一个 Double 作为 Double extends Number。但是 Double 不是 Integer,所以这不是类型安全的。

所有的 K 都是 Middle,但不能保证所有的 Middle 都是 K。

关于Java 泛型 - <K extends Middle> - K 是 Middle 的真正子代吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38354637/

相关文章:

generics - 如何在成功时返回用户指定的类型或在失败时返回 String?

C++继承问题

java - BeanUtils.copyProperties(subclass,superclass) 对于子类字段值返回 null

c++ - 将函数从一个类发送到另一个类并在 C++ 中执行

java - 泛型编译错误

java - EMMA 究竟是如何标记被覆盖的代码行的……?

java - 将 Java StringBuilder 转储到文件

java - 什么是类型转换?

entity-framework - 错误 : The type 'TEntity' must be a reference type

java - 我将如何删除或使边框不可见我使用 table.completeRow() 完成的单元格