我经常在类中看到像字段这样的声明。对我来说,使用变量类型的接口来提供实现的灵活性是完全有意义的。上面的示例仍然定义了必须使用哪种s,分别允许哪些操作以及在某些情况下(由于文档)它应该如何表现。List<String> list = new ArrayList<>();Set<String> set = new HashSet<>();Collection
现在考虑这样一种情况,即实际上只需要(甚至)接口的功能才能在类中使用字段,并且这种实际上并不重要,或者我不想过度指定它。因此,我选择例如作为实现,并将字段声明为 。CollectionIterableCollectionHashSetCollection<String> collection = new HashSet<>();
在这种情况下,该字段是否应实际属于类型?这种声明是不是不好的做法,如果是,为什么?或者,尽可能少地指定实际类型(并且仍然提供所有必需的方法)是一种很好的做法。我问这个问题的原因是因为我几乎从未见过这样的声明,最近我只需要指定接口的功能,我得到了更多。SetCollection
例:
// Only need Collection features, but decided to use a LinkedList
private final Collection<Listener> registeredListeners = new LinkedList<>();
public void init() {
ExampleListener listener = new ExampleListener();
registerListenerSomewhere(listener);
registeredListeners.add(listener);
listener = new ExampleListener();
registerListenerSomewhere(listener);
registeredListeners.add(listener);
}
public void reset() {
for (Listener listener : registeredListeners) {
unregisterListenerSomewhere(listener);
}
registeredListeners.clear();
}
手掌心
慕的地6264312
噜噜哒
相关分类