[英]static final methods in enum
所以我浏览了谷歌和SO,我找不到一个例子或解释: enum
中static
final
方法的目的是什么?
我的理解:
static
方法可以像函数/过程语言一样被访问。 final
表示你无法覆盖它。 无法更改参考。 正如assylias在评论中指出的那样, static
也不能被覆盖。 enum
s不能被子类化, 这里解释。 那么enum
的static
final
方法有什么意义,如果它永远不会被覆盖,因为它不会有子类?
通过使静态方法最终, 可以防止子类隐藏它 (只有实例方法可以覆盖)。
由于enum不能被子类化,因此制作静态方法final是多余的,但不是禁止的。
注意:从技术上讲,每个具有类主体的枚举常量都隐式定义了一个扩展枚举的匿名类 。 但由于内部类可能不会声明静态方法 ,因此静态final方法不能隐藏在这样的常量类体中。
很容易理解为什么static
方法有意义,所以我想问题是关于final
修饰符。
final
在这里没有任何意义,除了可能使代码更容易阅读,但不是很多。
它类似于interface
方法通常被编写为public void foo();
即使接口成员总是公开的。
在Java中,Enum类型用于表示固定的常量集,并使其成为静态final,仅帮助其初始化一次,单个副本在所有实例之间共享,使用类名访问变量,最后更像是只读
当您声明枚举的实例时,您可以覆盖枚举的方法,实际上枚举实例被实现为(或想到)子类。 static
方法不能在任何情况下被覆盖,但在OP和其他答案的暗示final
是多余的一个enum
是假的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.