gpt4 book ai didi

Java方法关键字 "final"及其使用

转载 作者:搜寻专家 更新时间:2023-10-31 08:24:30 25 4
gpt4 key购买 nike

当我创建复杂类型层次结构(多个级别,每个级别多个类型)时,我喜欢在实现某些接口(interface)声明的方法上使用 final 关键字。一个例子:

interface Garble {
int zork();
}

interface Gnarf extends Garble {
/**
* This is the same as calling {@link #zblah(0)}
*/
int zblah();
int zblah(int defaultZblah);
}

然后

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. 我认为根据设计原则和模式(例如模板方法 模式)覆盖具体 内容是不好的。我不希望其他开发人员或我的用户这样做。

所以 final 关键字非常适合我。我的问题是:

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

最佳答案

Why is it used so rarely in the wild?

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

Can you show me some examples / reasons where final (in a similar case to mine) would be very bad?

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

关于Java方法关键字 "final"及其使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4700003/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com