Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 类型不匹配:无法从集合转换<;频道>;到Iterable<;ICleanable>;_Java_Generics_Interface_Parameter Passing_Type Mismatch - Fatal编程技术网

Java 类型不匹配:无法从集合转换<;频道>;到Iterable<;ICleanable>;

Java 类型不匹配:无法从集合转换<;频道>;到Iterable<;ICleanable>;,java,generics,interface,parameter-passing,type-mismatch,Java,Generics,Interface,Parameter Passing,Type Mismatch,Java上下文: 类别:频道实现ICleanable 变量:Set channels=new HashSet() 我需要使用Iterable数组作为参数调用此方法: void unexport(Iterable<ICleanable>[] cleanables) void unexport(Iterable[]可清洗) 但是我想不出怎么写这个电话。此版本不起作用: unexport(new Iterable<ICleanable>[] { channels }) u

Java上下文:

类别:
频道实现ICleanable

变量:
Set channels=new HashSet()

我需要使用
Iterable
数组作为参数调用此方法:

void unexport(Iterable<ICleanable>[] cleanables)
void unexport(Iterable[]可清洗)
但是我想不出怎么写这个电话。此版本不起作用:

unexport(new Iterable<ICleanable>[] { channels })
unexport(新的Iterable[]{channels})
编译器说:“
类型不匹配:无法从Set转换为Iterable

如有帮助(和/或参考学习材料),将不胜感激。谢谢


编辑。现在我已经得到了答案,我可以总结我错在哪里了

我对泛型和子类型有问题。这是一个初学者的错误(这正是我想要的)。线索:

List ls=new ArrayList();
列表lo=ls;//非法,列表不是列表!
添加(新对象());
字符串s=ls.get(0);//尝试将对象指定给字符串!
列表
不能是
列表否则类型安全无效。
这是可以解释的

我对泛型数组还有第二个问题

unexport(new Iterable<ICleanable>[] { channels })
unexport(新的Iterable[]{channels})
无法创建Iterable的数组。这是可以解释的。类型转换错误使编译器无法在更正前检测到第二个错误

就我而言,我的结局是:

void unexport(List<List<? extends ICleanable>> cleanables) {...}
Channel implements ICleanable;
List<Channel> channels = new ArrayList<>();
List<List<? extends ITVCleanable>> list = new ArrayList<>();
list.add(channels);
unexport(list);
void unexport(List您正在尝试创建一个at
new Iterable[]
。您不能直接创建泛型数组,因此可以执行以下操作:

unexport((Iterable<ICleanable>[]) new Iterable[] { channels });
unexport((Iterable[])新Iterable[]{channels});

通道.迭代器();
有效吗?等等,为什么它是一个
Iterable[]
?你也在尝试在那里创建泛型数组。@doctorlove。根据你的建议:
无法从迭代器转换为Iterable
。在这个方法中,我想处理一个大小未知的列表(Iterable集合)。我曾想过使用…但它会创建一个堆污染门,因此array.Channel实际上扩展了UnicastRemoteObject并实现了ICleanable。该方法只对ICleanable功能感兴趣。泛型=参数化类型+参数化方法+通配符。易于理解的概念。但泛型似乎不适合Java的其他部分:大量的限制、例外和特殊情况导致了一个大的意大利面盘。这些情况没有什么意义,或者不一致,因此很难记住。对这些情况的简短而全面的介绍,以及它们存在的合理性,将优于对特定ca的多个不完整的解释se.有人知道这样的总结吗?谢谢!啊,如果我能一劳永逸地得到这个:-)
unexport((Iterable<ICleanable>[]) new Iterable[] { channels });