为什么不从 Enum> 扩展

2023-12-03

我偶然发现了以下问题,我无法从 Java 1.5(java.lang 包)中定义的此类扩展和实现

public abstract class Enum<E extends Enum<E>> {...
}..

我遇到的问题是创建自己的枚举类型,它具有不同的序数值。我不想通过使用不同的序数名称(如 getCode() 等)来实现它。所以我想我可以扩展上面的类。

public final class XYZ extends Enum<XYZ> { //Does not work.
  //
  A("A", 1),
  B("B", 7);
  .
}

我知道我可以执行以下操作:

public enum NEWEnum {
   A(1),
   B(7);

   private int code;
   private NEWEnum(int code) {
     this.code = code;
   }
   public int getCode() {
     return this.code;
   }
}

我更喜欢在枚举中使用通常的命名,例如 ordinal() 和 name() 。


你不能像这样扩展 Enum 。它内置于编译器或运行时(不确定是哪一个)。

但看起来您正在尝试解决错误的问题;枚举值的序数不应具有任何功能含义。一旦你给它一个,它应该有一个与“Ordinal”不同的名称。您的第二个代码片段远远优于您的第一个代码片段。

一般来说,依赖序数来做任何事情都是不好的做法。它可能从一开始就不应该被曝光。您唯一可以信赖的就是名称以及您自己分配的任何值。

如果将字段命名为“ordinal”对您来说很重要,只需使用类型安全枚举模式(第 21 项), Enum 只是它的一个实现。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么不从 Enum> 扩展 的相关文章

随机推荐

  • 如何将 .py 更改为 .exe

    我用 python 编写了一个 py 格式的程序 但是 我希望它位于 exe 中 我发现的选项是 py2exe py安装程序 这两个程序的问题是因为我运行的是 python 3 6 而这两个程序不支持它 帮助 Python 3 6 仍然不受
  • 滚动视图中基于平移手势的移动视图控制器

    现在我有一个占据整个视图控制器的滚动视图 下面的代码能够移动滚动视图 但我想移动整个视图控制器 我该怎么做呢 override func viewDidLoad pan UIPanGestureRecognizer target self
  • 如何为 T-SQL 选择中的每一行生成随机数?

    我的表中的每一行都需要一个不同的随机数 以下看似显而易见的代码对每一行使用相同的随机值 SELECT table name RAND magic number FROM information schema tables 我想从中得到一个
  • Outlook 互操作异常

    尝试将 Outlook 自动化为 Microsoft Office Interop Outlook Application myApp new Microsoft Office Interop Outlook ApplicationClas
  • 寻找关键的最大价值

    我想找出面积最大的国家 我的数据集如下 Afghanistan 648 Albania 29 Algeria 2388 Andorra 0 Austria 84 Bahrain 1 Bangladesh 143 Belgium 31 Ben
  • 更改模型: 由 keras 在 model.summary() 输出中自动给出

    调用命令时 print model summary 我得到以下输出 如何重命名由 Keras 自动生成的突出显示字段 预先感谢您的帮助 有参数 名称 以函数格式 inp Input 10 out Dense 1 inp m Model in
  • 如何将多张图像合并为一张?

    我有几个图像 第三方 例如设置 mysql 设置通用 php 应用程序环境 设置第三方工具 我想制作一个 Dockerfile Docker Image 来组合这两个图像 然后运行更多命令 imageA imageV gt sharedIm
  • 封装在JavaScript中,存在吗?

    我有使用 C 编程语言的经验 但现在我还必须使用 JS 它对我来说相当新 我尝试用 JS 开发一个简单的类模拟 如下所示 http jsfiddle net T74Zm function A inputValue this Init inp
  • 如何让 rake 任务在 dev 以外的环境中运行?

    我有一台具有特殊 暂存 环境的暂存机 我总是忘记在该机器上运行 rake 任务 例如 rake jobs work RAILS ENV staging 所以我最终做了 rake jobs work 然后我很困惑为什么我的数据库中没有任何变化
  • pygame中.quit和.QUIT有什么区别

    我只是想知道之间的区别 quit and QUIT在 pygame 我已经测试了两者 但我仍然不明白它们是如何工作的 QUIT是事件类型的枚举常量 参见event模块 quit 事件在 pygame 窗口关闭时发生 for event in
  • Google App Engine python 入站邮件 LookupError:未知编码

    我按照示例使用 标准 入站邮件处理程序接收发送到我的 Google App Engine 应用程序的入站电子邮件在文档中 似乎发送到应用程序的某封电子邮件 不是由我发送 导致电子邮件 api 抛出 LookupError 未知编码异常 请参
  • 使用 jQuery 在浏览器调整大小时更改图像 src

    我有两张不同尺寸的图像 一张适用于小于 759px 的屏幕 另一张适用于大于 759px 的屏幕 我已经设法在文档加载时根据窗口宽度更改图像的来源 但我真的希望能够在调整浏览器大小时执行此操作 但在我的一生中 我无法让它执行此操作 它似乎只
  • 图像处理以去除线条

    我试图最终得到一张只有文本的图像 我的代码会将此图像视为灰度 并从中删除所有长线以及除文本 符号 测量值之外的所有内容 Is this something that can be accomplished using image proce
  • 如何从Oracle SQL中的字符开头删除定义的值?

    我在 Oracle SQL 中有如下表 col1 ABC 1234 ABC 55674 ABC 11 所以我在 col1 中有 总是 ABC 在每个值的开头 ABC 后不同长度的值 我需要如下结果 所以我需要删除 ABC 从每个值的开头 c
  • Pyparsing:获取结果名称中的标记位置

    我正在开发一个使用 pyparsing 解析命令行的程序 它使用 readline 库来提供命令编辑和完成 在应用程序的上下文中 有效的命令行是path 可选 然后是命令名称 可选 和一些参数 也是可选的 为了提供命令完成 应用程序解析命令
  • htmlspecialchars 和 mysql_real_escape_string 是否可以保护我的 PHP 代码免受注入?

    今天早些时候有人问了一个关于Web 应用程序中的输入验证策略 在撰写本文时 最佳答案建议PHP只是使用htmlspecialchars and mysql real escape string 我的问题是 这总是足够的吗 还有更多我们应该知
  • 如何从数组中删除所有数字?

    我正在尝试从数组中删除所有数字 该循环完全按照我想要的方式工作 但 splice 方法仍然由于某种原因跳过一些元素 let arr 1 2 3 4 5 notanumber 6 for let element of arr let inde
  • 使用 python os.rename 时出现错误 [183]

    这是我第一次使用 python 我一直遇到错误 183 我创建的脚本在网络中搜索所有 py 文件并将它们复制到我的备份驱动器 请不要嘲笑我的剧本 因为这是我的第一个剧本 我在脚本中做错了什么有什么线索吗 import os import s
  • 防止 ansible 在通过 with_items 传递时解析字符串

    我正在尝试使用with items指定要传递给自定义 ansible 模块的键 值对列表 当键或值字符串具有类似列表的格式时 就会出现问题 例如 a b c d 在这种情况下with items大概将字符串转换为列表并对我的配置造成严重破坏
  • 为什么不从 Enum> 扩展

    我偶然发现了以下问题 我无法从 Java 1 5 java lang 包 中定义的此类扩展和实现 public abstract class Enum