为什么这么多`final`课程?

时间:2012-12-14 17:24:37

标签: java oop final

我经常遇到这样一种情况:将java.util类子类化得更加容易,但是因为它已被标记为final,我必须用垃圾丢弃我的代码。

this为例。在我看来,OP想要的是Scanner,如果给出一个不存在的文件,就会给它一个空文件(而不是抛出异常)。现在对我来说,这是Scanner的简单子类的完美候选者,但这是不可能的,因为Scanner是最终的。

我经常希望处理从根本上String但稍微做一些的对象(也许它们在结尾处有一个校验和)但同样,我必须跳过各种各样的箍(实现{{ 1}}通常)让它发生在一个真正简单的CharSequence子类是明显的oop候选者的地方。

我们对String课程走得太远了吗?我认识到标记课程final的主要原因是维持一份规定的合同,我只是觉得有时对合同的一个警告对于用户来说比final课程更有益。

我看到两种可能无法入侵的解决方案:

  1. 坚持所有final类都实现了final,因此包装一个并重新实现interface并稍微改变功能就变得容易了。
  2. 在类的合同中添加警告,如果它是子类,则可能不会如所描述的那样起作用。谁知道,也许我们可以使用Annotation来帮助。

0 个答案:

没有答案