我可以定义扩展接口的ArrayLists和其他数据结构吗?

时间:2016-07-01 03:08:21

标签: java arraylist interface

我有很多实现接口的类。 我可以将堆栈,队列和ArrayList定义为这样吗?

ArrayList<Class<? extends BaseClass>> 

存储对象?在我的场景中,每个对象将来自Stack或ArrayList中的另一个类? 这种实施的利弊是什么? 我是Java新手,因此这个问题。对此有任何替代建议吗?

2 个答案:

答案 0 :(得分:6)

是的,你可以。

优点是你可以存储各种类型的对象,并确保他们实现相同的合同,因此可以多态地对待它们。如果不使用Object,您将无法将它们存储在单个结构中;假设不存在其他共性。

缺点是,如果没有额外的检查,您将无法知道其类型,因此仅限于该界面提供的功能。然后,我会坚持检查实例类型,然后进行强制转换,以便使用不常见的功能。

答案 1 :(得分:2)

  

我有很多实现接口的类

如果BaseClassinterface相符,并且您希望在BaseClassArrayList中存储Stack的任何子类型,则声明ArrayList<Class<? extends BaseClass>>为为此目的是错的。它就像是,

List<BaseClass> arrList = new ArrayList<BaseClass>();
  

我可以像这样定义Stacks,Queues和ArrayLists吗?

是的,您可以在基本类型接口上定义ArrayListStack并输入具体子类的对象。

  

在我的场景中,每个对象都来自于另一个类   Stack,还是ArrayList?

是的,如果您已经插入了。您可以在BaseClass中插入ArrayList的任何子类型,因此如果您有put个这样的元素,那么这些元素就会存在。

  

这种实施的利弊是什么?

这些与在ChiefTwoPencils的答案中已经列出的相同 - 您可以自由地在一个List中存储各种类型的对象,但是当您从列表中检索对象以进行处理时,您可能必须检查其类型等(如果对某些子类型的特定行为感兴趣)。

希望它有所帮助!!