当我创建复杂类型层次结构(多个级别,每个级别几种类型)时,我喜欢使用final
实现某些接口声明的方法上的关键字。一个例子:
interface Garble {
int zork();
}
interface Gnarf extends Garble {
/**
* This is the same as calling {@link #zblah(0)}
*/
int zblah();
int zblah(int defaultZblah);
}
And then
abstract class AbstractGarble implements Garble {
@Override
public final int zork() { ... }
}
abstract class AbstractGnarf extends AbstractGarble implements Gnarf {
// Here I absolutely want to fix the default behaviour of zblah
// No Gnarf shouldn't be allowed to set 1 as the default, for instance
@Override
public final int zblah() {
return zblah(0);
}
// This method is not implemented here, but in a subclass
@Override
public abstract int zblah(int defaultZblah);
}
我这样做有几个原因:
- 它帮助我开发类型层次结构。当我将一个类添加到层次结构中时,非常清楚我必须实现哪些方法,以及我不能覆盖哪些方法(以防我忘记有关层次结构的详细信息)
- 我认为压倒一切concrete根据设计原则和模式,东西是不好的,例如
template method
图案。我不希望其他开发人员或我的用户这样做。
So the final
关键字非常适合我。我的问题是:
为什么它在野外很少被使用?你能告诉我一些例子/原因吗final
(与我的情况类似)会很糟糕吗?
为什么它在野外很少被使用?
因为你应该多写一个词来使变量/方法成为最终的
你能给我展示一些最终(与我的情况类似)会非常糟糕的例子/原因吗?
通常我会在 3D 零件库中看到此类示例。在某些情况下,我想扩展一些类并改变一些行为。尤其是在没有接口/实现分离的非开源库中,这是危险的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)