因此,我发现Collection
作为Interface
有许多子接口和子类。通常看到的一件事是使用接口而不是使用实际的类,这提供了灵活性:
List<Interger> L1 = new ArrayList<>();
但这也限制了在实际的Class
中使用某些特殊方法(对于ArrayList
,则没有那么多特殊方法)。但这可以通过强制转换来解决。
List<Integer> L2 = ((ArrayList<Integer>) L1).clone();
但是,有趣的是LinkedList
正在实现Collection
,List
,Queue
,Deque
。
那么共同使用LinkedList
的最佳方案是什么?
List<> L1 = new LinkedList<>();
Queue<> Q1 = new LinkedList<>();
Deque<> D1 = new LinkedList<>();
List
,那么这似乎是不必要的,因为我可以
List
中的ArrayList
。Interface
高1级的Class
,在这种情况下,应该选择Deque
而不是Queue
?我猜这只是令人困惑,因为Queue
和Deque
并没有实现List
,但是LinkedList
却实现了。而且我不知道为什么会这样?
谢谢
答案 0 :(得分:1)
根据dependency inversion principle组件应取决于抽象。因此,首先您需要选择最能满足您需求的摘要(例如接口或抽象类)。然后选择具体的实现方式。
没有所有情况下的最佳解决方案。