在java中,我经常发现自己实现了List
接口,而不是扩展AbstractList
类。这在Java API(以及我看过的许多第三方库)中很常见,它存在一个接口和该接口的抽象类。
这是为什么?为什么对于一个接口来说存在一个为它提供一点默认行为的抽象类是如此常见?并且有充分的理由不调用这样的抽象类,比如说DefaultListImpl
等吗?
答案 0 :(得分:1)
有趣的问题,我想很多人会有很多意见。从我的角度来看:
java.lang.reflect.Proxy
仅支持接口代理而不支持抽象类因此总是有理由使用接口。这些问题与Scala中的抽象类与特征非常相似。
您建议的命名惯例DefaultListImpl
不是一个好主意:
Default
没有说明实施情况,如果我们无法正确命名,我们要么:
Impl
会产生误导,因为很多人都希望能够全面实施这项功能