2

我有类SampleClass实现接口ISampleInterface
方法需要Collection<ISampleInterface>作为参数,但在我的代码中我想传递单个SampleClass对象。
我试图做一些铸造:

Collection<ISampleInterface> col = 
   (Collection<ISampleInterface>) Arrays.asList(new SampleClass[]{sampleClassInstance});

但我得到了铸造错误:

Cannot cast from List<SampleClass> to Collection<ISampleInterface>

任何想法如何在一条优雅的线路中做到这一点?

4

4 回答 4

3

您只需要指定正确的泛型类型参数:

Collection<ISampleInterface> col =
        Arrays.<ISampleInterface>asList(sampleClassInstance);

请注意,这new SampleClass[] { ... }是不必要的,因为asList需要T...varargs)所以数组创建是隐式的。

更重要的是,你可以写:

Collection<ISampleInterface> col =
        Collections.<ISampleInterface>singleton(sampleClassInstance);

Collections.singletonjavadoc:

返回一个只包含指定对象的不可变集合。返回的集合是可序列化的。

于 2013-05-01T13:30:43.817 回答
1

您需要更改签名才能使用Collection<? extends ISampleInterface>

于 2013-05-01T08:49:16.083 回答
1

尝试在调用中创建正确类型的数组asList()

Collection<ISampleInterface> col = 
   (Collection<ISampleInterface>) Arrays.asList(
       new ISampleInterface[] { sampleClassInstance });

话又说回来,这艘“优雅”的船已经航行了 IMO……

我也不认为你需要明确地转换为(Collection<ISampleInterface>). 所以你的可能应该成为

Collection<ISampleInterface> col = Arrays.asList(
   new ISampleInterface[] { sampleClassInstance });

那里更优雅一点

于 2013-05-01T08:51:00.557 回答
-1

错误的原因是java中的泛型不是类型协变的。你可以在网上阅读这方面的教程。

您可以使用以下替代方法:

col.addAll(Arrays.asList(new SampleClass[]{sampleClassInstance}));
于 2013-05-01T08:57:49.533 回答