繁体   English   中英

枚举中的静态最终方法

[英]static final methods in enum

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

我的理解:

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

那么enumstatic 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM