我经常遇到这样一种情况:将java.util
类子类化得更加容易,但是因为它已被标记为final
,我必须用垃圾丢弃我的代码。
以this为例。在我看来,OP想要的是Scanner
,如果给出一个不存在的文件,就会给它一个空文件(而不是抛出异常)。现在对我来说,这是Scanner
的简单子类的完美候选者,但这是不可能的,因为Scanner
是最终的。
我经常希望处理从根本上String
但稍微做一些的对象(也许它们在结尾处有一个校验和)但同样,我必须跳过各种各样的箍(实现{{ 1}}通常)让它发生在一个真正简单的CharSequence
子类是明显的oop候选者的地方。
我们对String
课程走得太远了吗?我认识到标记课程final
的主要原因是维持一份规定的合同,我只是觉得有时对合同的一个警告对于用户来说比final
课程更有益。
我看到两种可能无法入侵的解决方案:
final
类都实现了final
,因此包装一个并重新实现interface
并稍微改变功能就变得容易了。