首页 / JAVA / Java泛型“捕获?”
Java泛型“捕获?”
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java泛型“捕获?”,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1957字,纯文字阅读大概需要3分钟。
内容图文
![Java泛型“捕获?”](/upload/InfoBanner/zyjiaocheng/708/3fb82d8fc38547509c641153502012d9.jpg)
我正在使用TreeTable,在更换单元工厂时,我需要通过一个
Callback<TreeTableColumn<A, capture of ?>, TreeTableCell<A, capture of ?>>
A是我正在使用的课程,但我不知道如何处理“捕获?”
我试图创造
new Callback<TreeTableColumn<A, ?>, TreeTableCell<A, ?>>
但IDEA显示出警告
setCellFactory(Callback<TreeTableColumn<A, capture<?>>, TreeTableCell<A, capture<?>>>) in TreeTableColumn cannot be applied to (anonymous Callback<TreeTableColumn<A, ?>, TreeTableCell<A, ?>>)
我尝试使用特定的类(如String)而不是“?”同样,但没有任何帮助.
谁能向我解释如何使用它?
谢谢.
编辑:
我收集了更多信息.. TreeTableColumn的CellFactory< S,T>应该是Callback< TreeTableColumn< S,T>,TreeTableCell< S,T>>,但是,我正在使用的TreeTableColumn被创建为原始类型(在库中).
使用原始类型回调有效.但有没有其他选择如何解决这个问题?
解决方法:
通配符表示未知类型.
通配符捕获是将通配符类型的值绑定到新类型变量的过程.例如:
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>> {
...
}
}
内容总结
以上是互联网集市为您收集整理的Java泛型“捕获?”全部内容,希望文章能够帮你解决Java泛型“捕获?”所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。