我的课程SampleClass
正在实施接口ISampleInterface
方法需要Collection<ISampleInterface>
作为参数,但在我的代码中我想传递单个SampleClass
对象
我试图做一些演员:
Collection<ISampleInterface> col =
(Collection<ISampleInterface>) Arrays.asList(new SampleClass[]{sampleClassInstance});
但我得到了投射错误:
Cannot cast from List<SampleClass> to Collection<ISampleInterface>
任何想法如何在一个优雅的线上做到这一点?
答案 0 :(得分:3)
您只需指定正确的泛型类型参数:
Collection<ISampleInterface> col =
Arrays.<ISampleInterface>asList(sampleClassInstance);
请注意new SampleClass[] { ... }
是不必要的,因为asList
需要T...
(varargs),因此数组创建是隐式的。
更重要的是,你可以写:
Collection<ISampleInterface> col =
Collections.<ISampleInterface>singleton(sampleClassInstance);
来自Collections.singleton
javadoc:
返回仅包含指定对象的不可变集。返回的集合是可序列化的。
答案 1 :(得分:1)
您需要更改签名以使用Collection<? extends ISampleInterface>
答案 2 :(得分:1)
尝试在asList()
调用中创建正确的数组类型:
Collection<ISampleInterface> col =
(Collection<ISampleInterface>) Arrays.asList(
new ISampleInterface[] { sampleClassInstance });
然后,'优雅'号船已经驶向国际海事组织......
我也认为你不需要明确地转向(Collection<ISampleInterface>)
。所以你应该成为
Collection<ISampleInterface> col = Arrays.asList(
new ISampleInterface[] { sampleClassInstance });
在那里更优雅
答案 3 :(得分:-1)
错误的原因是java中的泛型不是类型协变。你可以在这方面阅读网上的教程。
您可以使用以下替代方法:
col.addAll(Arrays.asList(new SampleClass[]{sampleClassInstance}));