所以我看了看周围的谷歌和SO,我无法找到一个例子或解释:enum
中static
final
方法的目的是什么?enum中的静态最终方法
我明白了什么:
- 方法声明
static
可以像函数/程序语言来访问。 final
意味着你不能覆盖它。无法更改参考。正如assylias指出的,评论static
也不能被覆盖。enum
s不能被分类,解释here。
那么,有什么的static
final
方法enum
S中的点,如果它永远不会被覆盖因为不会有一个子类?
所以我看了看周围的谷歌和SO,我无法找到一个例子或解释:enum
中static
final
方法的目的是什么?enum中的静态最终方法
我明白了什么:
static
可以像函数/程序语言来访问。final
意味着你不能覆盖它。无法更改参考。正如assylias指出的,评论static
也不能被覆盖。enum
s不能被分类,解释here。那么,有什么的static
final
方法enum
S中的点,如果它永远不会被覆盖因为不会有一个子类?
通过制定最终的静态方法,you prevent it from being hidden(只有实例方法可以被子类覆盖)。
由于枚举不能被子类化,所以静态方法的最终是多余的,但不禁止。
注意:从技术上讲,每个枚举常量具有一个类体implicitly defines an anonymous class that extends the enum。但由于inner classes may not declare static methods,静态最终方法不能隐藏在这样一个常量的类体中。
很容易明白为什么static
方法有意义,所以我想问题是关于final
修饰符。
final
这里没有任何用处,除了可能使代码更容易阅读,但不是太多。
它类似于interface
方法通常写为public void foo();
,即使接口成员总是公开的。
当你声明枚举的实例时,你可以重写枚举的方法,本质上枚举实例被实现为(或认为)为子类。 static
方法在任何情况下都不能被覆盖,但OP中的含义和final
对于enum
是多余的其他答案是错误的。
您不能添加静态方法来枚举常量。 – assylias
在Java中枚举类型用于表示固定的一组常量并使其成为static final只有一次帮助其初始化,单个副本在所有实例之间共享,访问具有类名称的变量并且最终它更像一个只读
静态方法在任何情况下都不能被覆盖... – assylias
@Henry静态方法也不能被覆盖。 – biziclop
@ assylias我应该在第二点加上。 – wtsang02