gpt4 book ai didi

java - 类型转换泛型类

转载 作者:行者123 更新时间:2023-11-30 01:46:27 28 4
gpt4 key购买 nike

我有2个接口(interface):DataDBObject

DBObject extends Data 。它们是类 ITree 中的泛型.

如何转换 ITree<DBObject>ITree<Data>避免ClassCastException

private ITree<DBObject> structure; 

public ITree<Data> getDataStructure() {
return (ITree<Data>) structure;
}

最佳答案

这里不会出现类转换异常,而是会出现不兼容类型编译器错误。

您可以进行未经检查的转换:

return (ITree<Data>) (ITree<?>) structure;

但是你需要确保你完全理解为什么编译器认为这是不安全的(它会发出警告),并且能够证明它实际上是安全的;而且,重要的是,记录为什么它是安全的。

只有在 ITree<T> 的情况下这才是安全的没有可调用的方法接受涉及 T 的参数(除非这些方法不使用涉及类型 T 的事物更改实例的状态)。

例如,Supplier<T>可以安全地转换为 Supplier<ParentOfT> ,因为它没有接受任何参数的方法。

您可以将方法的返回类型设置为有界通配符:

public ITree<? extends Data> getDataStructure() {

这会阻止您在返回值上调用消费者方法,即它使这些方法不可调用(某种程度上)。

但是,不鼓励在返回类型中使用通配符,因为这样您就无法在调用站点删除该通配符。

关于java - 类型转换泛型类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57752712/

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