2010-04-08 84 views
0

我已阅读过类似的问题,但我仍然有点困惑。类型不匹配:无法从ArrayList <Data>转换为MyCollection

MyCollection extends ArrayList<MyClass> 

MyClass implements Data 

然而,这给了我 “无法从ArrayList中转换为MyCollection的”

MyCollection mycollection = somehandler.getCollection(); 

其中getCollection看起来像这样

public ArrayList<Data> getCollection() 

所以我的假设是明显错误的。我怎样才能让像我这样的工作会是喜欢

回答

4

ArrayList做不延伸MyCollection。这是相反的。

有几种方法来解决这个问题,根据不同的功能需求:

  1. 您需要提供一个MyCollection构造,可以采取另一种Collection
  2. 如果实际类型为MyCollection,那么您需要将ArrayList转换为MyCollection
  3. 如果实际类型为MyCollection,则需要将返回类型更改为MyCollection

也就是说,是什么让MyCollection如此不同,这显然不符合的List的合同,因此你需要强制转换/转换呢?这不应该发生,我会重新考虑设计/方法。

0

你只需要把结果

MyCollection mycollection = (MyCollection) somehandler.getCollection();

编辑:或改变getCollection()返回类型为MyCollection

+0

这只有在'getCollection'实际返回'MyCollection'类型的对象时才有效。 – 2010-04-08 12:10:49

1

您不能分配从超类型亚型,但你可以实现一个拷贝构造函数,那么你可以做这样相同的事情:

MyCollection myCollection = new MyCollection(somehandler.getCollection()); 

编辑:参数的构造函数的类型可能例如列表。

1

那么,想象你有

class SecondCollection extends ArrayList<MyClass> 

那么什么会ArrayList<MyClass>被转换为?

你需要或者希望ArrayList或返回MyCollection,或ArrayList的内容复制到一个新的实例MyCollection,或显式转换为MyCollection。我不推荐最后一个选项。

0

ArrayList<Data>不能投到MyCollection甚至到ArrayList<MyClass>。请参阅this post以获得很好的解释。

相关问题