枚举中的静态最终方法

2022-09-04 07:51:59

所以我环顾了一下谷歌和SO,我找不到一个例子或解释:方法在什么目的?staticfinalenum

我的理解:

  1. 方法声明可以像函数/过程语言一样访问。static
  2. final意味着您无法覆盖它。无法更改引用。正如assylias在评论中指出的那样,也不能被覆盖。static
  3. enums 不能被子类化,在这里解释。

那么,如果 s 中的方法永远不会被覆盖,因为它不会有子类,那么它有什么意义呢?staticfinalenum


答案 1

通过使静态方法成为 final,可以防止它被子类隐藏(只有实例方法可以重写)。

由于枚举不能被子类化,因此使静态方法成为最终方法是多余的,但不被禁止。

注意:从技术上讲,每个具有类体的枚举常量都隐式定义了一个扩展枚举的匿名类。但是,由于内部类可能不声明静态方法,因此静态最终方法不能隐藏在此类常量的类体中。


答案 2

很容易理解为什么方法有意义,所以我想问题是关于修饰符的。staticfinal

final在这里没有任何作用,除了可能使代码更易于阅读,但不是很多。

它类似于方法通常写成的方式,即使接口成员总是公共的。interfacepublic void foo();