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’您是否愿意与我们分享一些代码?