gpt4 book ai didi

java - 为什么可以将泛型列表强制转换为其类型参数

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:36:22 27 4
gpt4 key购买 nike

为什么下面的代码可以编译?
如果参数是一个类型参数,为什么允许将泛型列表转换为它的类型参数接口(interface)而不是泛型的 super 接口(interface)?

这是什么意思?

//Connection can be substituted by any interface
List<Connection> list = null;
Connection c = (Connection) list;

最佳答案

这与类型参数无关。这也适用:

List<String> list = null;
Connection c = (Connection) list;

这是可能的,因为 List 是一个接口(interface)类型。列表引用可能包含一个对象,该对象既实现了 List 接口(interface),又也是 Connection(不管是什么,类或界面),因此类型转换适用。

因此,由于转换可以 工作,所以编译器允许它。它只会拒绝理论上不可能的强制转换,即在单独的继承层次结构中涉及具体类型:

    JComponent c = null;
ArrayList l = (ArrayList) c;

您可以在 Java Language Specification 中查找关于哪些类型的转换在编译时合法的确切规则。 - 大约 30 行密集的语言律师。

关于java - 为什么可以将泛型列表强制转换为其类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3996609/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com