栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java泛型“捕获?”

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java泛型“捕获?”

通配符 表示一个未知类型。

通配符捕获 是将通配符类型的值绑定到新类型变量的过程。例如:

List<?> list = ...;shuffle(list);

哪里

<T> void shuffle(List<T> list) {    ...}

在此,方法调用后,的未知值将

?
绑定到新类型变量,从而允许shuffle方法引用该类型。
T``shuffle

Java编译器通过在匿名类型变量中捕获通配符的值来内部表示通配符的值,该变量称为“捕获的?”。(实际上,javac称它们为“捕获的#1”,因为对的不同用法

?
可能引用不同的类型,因此具有不同的捕获)。

好的,那么您的代码出了什么问题?您正在尝试调用方法

<S,T> setCellFactory(Callback<TreeTableColumn<S,T>, TreeTableCell<S,T>> factory);

Callback<TreeTableColumn<S,?>, TreeTableCell<S, ?>> factory;

在方法签名中,类型参数T代表单个类型,该类型必须由调用方提供。为方便起见,编译器会自动尝试推断合适的值(->类型推断)。您的编译错误意味着编译器无法执行此操作。

在这种情况下,这并不是类型推断的缺点,因为实际上不可能为分配合适的值

T
,因为两者都
?
必须是的子类型
T
,但是编译器无法知道两者
?
代表相同的类型,甚至相关类型。

要成功调用此方法,您的参数类型必须对所有出现的T使用相同的类型。如果手头已有这样的类型,请继续使用它。否则,您可以使用通配符捕获来引入一个:

setCellFactory(newFactory());

哪里

<S,T> Callback<TreeTableColumn<S,T>, TreeTableCell<S,T>> newFactory() {    return new Callback<TreeTableColumn<S,T>, TreeTableCell<S,T>> {        ...    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/428104.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号