枚举中的静态最终方法

时间:2013-01-10 18:52:51

标签: java oop enums

所以我浏览了谷歌和SO,我找不到一个例子或解释:staticfinal enum方法的目的是什么?

我的理解:

  1. 方法声明static可以像函数/过程语言一样访问。
  2. final表示您无法覆盖它。无法更改参考。正如评论static中指出的assylias也不能被覆盖。
  3. enum s无法进行子类化,解释here
  4. 那么static中的final enum方法的重点是什么,如果它永远不会被重写,因为它不会有子类?

4 个答案:

答案 0 :(得分:18)

通过创建一个静态方法final,子类可以覆盖you prevent it from being hidden(只有实例方法可以覆盖)。

由于enum不能被子类化,因此制作静态方法final是多余的,但不是禁止的。

注意:从技术上讲,每个枚举常量都有一个类体implicitly defines an anonymous class that extends the enum。但是从inner classes may not declare static methods开始,静态final方法无法隐藏在这样的常量类体中。

答案 1 :(得分:4)

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

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

它类似于interface方法通常被编写为public void foo();的方式,即使接口成员总是公开的。

答案 2 :(得分:2)

在Java中,Enum类型用于表示固定的常量集,并使其成为静态final,仅帮助其初始化一次,单个副本在所有实例之间共享,使用类名访问变量,最后更像是读取-only

答案 3 :(得分:0)

当您声明枚举的实例时,您可以覆盖枚举的方法,实际上枚举实例被实现为(或想到)子类。在任何情况下都无法覆盖static个方法,但OP final对于enum多余的答案中的含义是错误的。