13

所以我环顾了谷歌和所以,我找不到一个例子或解释:static final方法的目的是什么enum

我的理解:

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

那么,如果 s 中的static final方法enum永远不会被覆盖,那么它的意义何在,因为不会有子类?

4

4 回答 4

18

通过将静态方法设为 final,您可以防止它被子类隐藏(只有实例方法可以被覆盖)。

由于 enum 不能被子类化,因此将静态方法设为 final 是多余的,但并非禁止。

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

于 2013-01-10T18:57:41.500 回答
4

很容易看出为什么static方法有意义,所以我想问题是关于final修饰符的。

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

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

于 2013-01-10T18:57:21.900 回答
2

在 Java 中,枚举类型用于表示一组固定的常量,并将其设为 static final 仅有助于其初始化一次,单个副本在所有实例之间共享,使用类名访问变量,而 final 更像是只读的

于 2013-01-10T19:05:33.850 回答
0

当您声明枚举的实例时,您可以覆盖枚举的方法,本质上枚举实例被实现为(或被认为)为子类。 static在任何情况下都不能覆盖方法,但 OP 和其他final对 an 多余的答案的含义enum是错误的。

于 2013-01-10T19:01:25.633 回答