Java 界面铸造技术`
如果我有一个名为Java 界面铸造技术`,java,generics,interface,polymorphism,javafx,Java,Generics,Interface,Polymorphism,Javafx,如果我有一个名为Cue的类,它实现了Tickable。后来,我有了一个这样的可观察列表:可观察列表oListoList实现了Iterable(这就是ObservableList的声明方式) 我有一个函数需要Iterable。我如何让它接受可观察列表提示是一个可勾选的,而可观察列表是一个可勾选的。由于某些原因,我不能在他们之间进行等级划分或自动向上转换。有什么方法可以做到这一点吗?你不能从Iterable转换成Iterable,因为即使提示是一个Iterable,一个Iterable也不是一个It
Cue
的类,它实现了Tickable
。后来,我有了一个这样的可观察列表:可观察列表oList
oList
实现了Iterable
(这就是ObservableList
的声明方式)
我有一个函数需要
Iterable
。我如何让它接受可观察列表
提示是一个可勾选的
,而可观察列表是一个可勾选的
。由于某些原因,我不能在他们之间进行等级划分或自动向上转换。有什么方法可以做到这一点吗?你不能从Iterable
转换成Iterable
,因为即使提示是一个Iterable
,一个Iterable
也不是一个Iterable
,因为Java的泛型是不变的
要使方法接受可观察列表
,使方法参数类型为Iterable
或使用有界通配符--Iterable,可以通过删除泛型类型信息来执行此操作:
public static void main(String[] args) {
ObservableList<Cue> oList = new ObservableList<Cue>();
naughtyCall(oList);
}
@SuppressWarnings({ "rawtypes", "unchecked" })
static void naughtyCall(ObservableList oList) {
doSomething(oList);
}
static void doSomething(Iterable<Tickable> iterable) {
// TODO
}
publicstaticvoidmain(字符串[]args){
ObservableList oList=新的ObservableList();
淘气鬼(奥利斯特);
}
@SuppressWarnings({“rawtypes”,“unchecked”})
静态空穴淘气球(可观测的孤岛){
doSomething(oList);
}
静态空隙剂量测定法(Iterable Iterable){
//待办事项
}
然而,我不建议这样做!关于你应该做的事情,请参见Tman的回复
更新:对于有兴趣玩这个游戏的人,下面是我用来重现OP情况的其余代码:
class Cue implements Tickable {
}
interface Tickable {
}
static class ObservableList<T> implements Iterable<T> {
@Override
public Iterator<T> iterator() {
return null;
}
}
类提示实现了Tickable{
}
接口可勾选{
}
静态类ObservableList实现了Iterable{
@凌驾
公共迭代器迭代器(){
返回null;
}
}
正如RGETMAN所说,您应该将函数参数类型更改为IterableYou’您是否愿意与我们分享一些代码?