我有很多实现接口的类。
我可以将堆栈,队列和ArrayList
定义为这样吗?
ArrayList<Class<? extends BaseClass>>
存储对象?在我的场景中,每个对象将来自Stack或ArrayList中的另一个类? 这种实施的利弊是什么? 我是Java新手,因此这个问题。对此有任何替代建议吗?
答案 0 :(得分:6)
是的,你可以。
优点是你可以存储各种类型的对象,并确保他们实现相同的合同,因此可以多态地对待它们。如果不使用Object
,您将无法将它们存储在单个结构中;假设不存在其他共性。
缺点是,如果没有额外的检查,您将无法知道其类型,因此仅限于该界面提供的功能。然后,我会坚持检查实例类型,然后进行强制转换,以便使用不常见的功能。
答案 1 :(得分:2)
我有很多实现接口的类
如果BaseClass
与interface
相符,并且您希望在BaseClass
或ArrayList
中存储Stack
的任何子类型,则声明ArrayList<Class<? extends BaseClass>>
为为此目的是错的。它就像是,
List<BaseClass> arrList = new ArrayList<BaseClass>();
我可以像这样定义Stacks,Queues和ArrayLists吗?
是的,您可以在基本类型接口上定义ArrayList
或Stack
并输入具体子类的对象。
在我的场景中,每个对象都来自于另一个类 Stack,还是ArrayList?
是的,如果您已经插入了。您可以在BaseClass
中插入ArrayList
的任何子类型,因此如果您有put
个这样的元素,那么这些元素就会存在。
这种实施的利弊是什么?
这些与在ChiefTwoPencils的答案中已经列出的相同 - 您可以自由地在一个List
中存储各种类型的对象,但是当您从列表中检索对象以进行处理时,您可能必须检查其类型等(如果对某些子类型的特定行为感兴趣)。
希望它有所帮助!!