Java方法关键字“final”及其使用

2024-05-01

当我创建复杂类型层次结构(多个级别,每个级别几种类型)时,我喜欢使用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);
}

我这样做有几个原因:

  1. 它帮助我开发类型层次结构。当我将一个类添加到层次结构中时,非常清楚我必须实现哪些方法,以及我不能覆盖哪些方法(以防我忘记有关层次结构的详细信息)
  2. 我认为压倒一切concrete根据设计原则和模式,东西是不好的,例如template method图案。我不希望其他开发人员或我的用户这样做。

So the final关键字非常适合我。我的问题是:

为什么它在野外很少被使用?你能告诉我一些例子/原因吗final(与我的情况类似)会很糟糕吗?


为什么它在野外很少被使用?

因为你应该多写一个词来使变量/方法成为最终的

你能给我展示一些最终(与我的情况类似)会非常糟糕的例子/原因吗?

通常我会在 3D 零件库中看到此类示例。在某些情况下,我想扩展一些类并改变一些行为。尤其是在没有接口/实现分离的非开源库中,这是危险的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java方法关键字“final”及其使用 的相关文章

随机推荐