为什么在 Java 中要在单独的文件中声明枚举?

2024-02-18

为什么这个枚举在它自己的文件中声明。这样做有什么好处吗?另外我如何才能将其放入两个文件之一中。我真的不知道我在做什么。还请用简单的方式解释一下,因为这是教科书示例,而且我对 Java 还很陌生。

刻度名称.java

enum ScaleName {celsius, fahrenheit, kelvin, rankine};

温度.java

class Temperature {

    private double number;
    private ScaleName scale;

    public Temperature() {
        number = 0.0;
        scale = ScaleName.fahrenheit;
    }

    public Temperature(double number) {
        this.number = number;
        scale = ScaleName.fahrenheit;
    }

    public Temperature(ScaleName scale) {
        number = 0.0;
        this.scale = scale;
    }

    public Temperature(double number, ScaleName scale) {
        this.number = number;
        this.scale = scale;
    }

    public void setNumber(double number) {
        this.number = number;
    }

    public double getNumber() {
        return number;
    }

    public void setScale(ScaleName scale) {
        this.scale = scale;
    }

    public ScaleName getScale() {
        return scale;
    }
}

使用温度.java

class Temperature {

    private double number;
    private ScaleName scale;

    public Temperature() {
        number = 0.0;
        scale = ScaleName.fahrenheit;
    }

    public Temperature(double number) {
        this.number = number;
        scale = ScaleName.fahrenheit;
    }

    public Temperature(ScaleName scale) {
        number = 0.0;
        this.scale = scale;
    }

    public Temperature(double number, ScaleName scale) {
        this.number = number;
        this.scale = scale;
    }

    public void setNumber(double number) {
        this.number = number;
    }

    public double getNumber() {
        return number;
    }

    public void setScale(ScaleName scale) {
        this.scale = scale;
    }

    public ScaleName getScale() {
        return scale;
    }
}

为什么在 Java 中要在单独的文件中声明枚举?

你不have to声明一个enum在一个单独的文件中。你可以这样做:

public class Temperature {
    public enum ScaleName {celsius, fahrenheit, kelvin, rankine};
    
    private double number;
    private ScaleName scale;

    public Temperature() {
        number = 0.0;
        scale = ScaleName.fahrenheit;
    }
    ...
}

这与使枚举成为顶级类之间的唯一区别是您现在需要qualify当您在不同的类中使用枚举时的名称。

但到底发生了什么事在我的例子中与枚举是任何其他静态嵌套类时发生的情况没有什么不同。 (嵌套枚举是隐式静态的,因此我们不需要static关键词。看JLS 8.9 https://docs.oracle.com/javase/specs/jls/se11/html/jls-8.html#jls-8.9.)


为什么这个枚举在它自己的文件中声明。

Because the code author chose to do it this way1.

这样做有什么好处吗?

是的。这意味着不必限定enum使用它......在某些情况下,如果enum如上嵌套。


实际上,Java 确实允许您将多个顶级类放入同一个源文件中前提是除一个类外,所有类都是“包私有”。然而,这样做通常被认为是不好的风格,并且对于某些工具链来说可能会出现问题......我听说过。


1 - If you want to know the real reason why the authors of the textbook chose to do it that way, you would need to ask them!

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

为什么在 Java 中要在单独的文件中声明枚举? 的相关文章

  • Log4j2 自动配置

    我在应用时遇到问题log4j2 xml自动配置正确 我认为这与我的文件夹排列有关 我在用着maven添加 log4j2 库并按如下方式安排我的项目 一个包含所有 通用 类的项目 供我的系统的服务器和客户端使用 另一个 核心 项目 服务器端应
  • 如何在gradle中执行jar文件?

    当我使用 ant 构建我的 android 项目时 我需要这样的任务
  • 如何在Android上创建原生C++库?

    我需要用C 编写一个动态链接库 供Android上的Java使用 据我所知 它应该是 so 库 但我不知道该怎么做 我尝试了 Cygwin 但它崩溃了 海湾合作委员会1 cpp usr lib gcc i686 pc cygwin 4 3
  • 合并两个 Jasper 报告

    我有一个带有下拉菜单的网络应用程序 用户可以从中选择报告可视化的类型 报告 1 报告 2 报告 3 等 根据所选的报告 Jasper 报告将在服务器上编译并以 PDF 格式的弹出窗口打开 在服务器端 我使用下面的代码以单独的方法实现每个报告
  • 在总是抛出方法之后如何检测死代码?

    考虑以下代码 Test public void testDeadCode letsThrow System out println will never be reached private final void letsThrow thr
  • 这是重载,不同类中具有相同名称和不同签名的方法吗?

    如果我有以下 Java 代码 class A public int add int a int b return a b class B extends A public float add float a float b return a
  • 如何在 Java 中从任意基数转换为基数 10

    我是 Java 新手 我想编写一个程序 仅使用算术运算将基数 2 3 4 5 6 7 8 9 16 转换为基数 10 我已经完成了从键盘读取字符串 如果数字是十六进制 并将其转换为整数 之后我做了一个 while 循环 将数字分割为数字并将
  • 如何从c调用Java函数

    我被这个问题困扰了 我需要从 c c 调用 Java 函数 在示例和教程中 我只看到一个java应用程序调用一个c方法 并在同一个方法中调用另一个java方法 但我想做的是从代码的任何部分调用java方法 这就是我所拥有的 static J
  • 如何按照最初给出的时区存储和显示日期?

    我有一台服务器正在从不同时区的客户端提供数据 数据源包含人物 他们的出生日期和其他事件日期 出于我们的目的 如果我们可以将日期存储为给我们的日期 那就很方便了 例如 如果客户位于加利福尼亚州 并且告诉我们该人的出生日期是 5 月 31 日
  • 为什么Java不支持C中的clrscr这样的函数?

    我有一个问题 对很多人来说可能听起来很愚蠢 但我不能停下来把它发布在这里 因为在互联网上找不到任何东西 为什么java没有我们在C中使用的clrscr之类的函数 如果我创建了一个基于用户输入反复迭代的 java 控制台应用程序 然后如果我想
  • gRPC 客户端重新连接逻辑导致服务器端打开重复流

    我有一个使用两个双向流的 gRPC 客户端 由于目前未知的原因 当我们每小时发送一次 keepAlive ping 时 会出现 onError 并带有statusRuntimeException在两个流上都被调用 为了处理重新连接 我在 j
  • Gradle:找不到受信任的证书

    我正在尝试使用 Gradle 在 Ubuntu 服务器上构建我的 Android 项目 在我的 Windows 10 PC 上使用 Android Studio 构建工作正常 但使用 gradlew build or gradlew cle
  • JAXB 将不需要的命名空间声明附加到标签

    我正在实现 XMPP 的自制子协议 并且使用 StAX 和 JAXB 的组合来解析 编组消息 当我整理一条消息时 我最终会得到大量不需要的命名空间声明
  • Java swing:为 JComboBox 实现我的 Combobox 模型

    我需要我的组合框包含组织的简称 问题是我can在下拉列表中查看组织名称 但是cant实际上选择它 我的错误在哪里 public class ToComboBoxModel extends AbstractListModel implemen
  • 如何在 spring-ws 中解析 SoapFaultClientException

    我正在使用 spring ws 2 3 1 在为 Web 服务创建客户端时 有时我得到SoapFaultClientException像下面这样
  • 从邮件服务器读取发送的邮件

    我知道如何从 INBOX 文件夹中检索邮件 但现在我想从 SENT ITEMS 文件夹中检索邮件 我正在使用 imap 检索数据 让我知道我应该在此函数中传递什么参数才能从 SENT ITEMS 文件夹中获取邮件Folder folder
  • 无法在 Windows 7 64 位中正确设置 java 路径

    我已经在计算机中安装了 java 1 6 并且还使用高级变量设置设置了路径 当我尝试执行 java 时 在命令提示符下出现此错误 Error could not open C Program Files Java jre7 lib amd6
  • JSP 自定义标签库:嵌套评估

    假设我有自定义标签库
  • @Transactional 方法调用另一个没有 @Transactional 注解的方法?

    我在 Service 类中看到了一个方法 该方法被标记为 Transactional 但它还调用同一类中的一些其他方法 这些方法未标记为 Transactional 这是否意味着对单独方法的调用导致应用程序打开与数据库的单独连接或挂起父事务
  • 使用 Vaadin 生成 HTML 速度缓慢

    我是一个有问题的开发人员 目前我们的项目 使用 Vaadin 即将结束 但是 我们在其中一个视图中显示简单数据时遇到了一些麻烦 Vaadin 完成生成后 需要显示超过 500 KB 的数据 以及超过 15K 的 DOM 元素 在完成之前需要

随机推荐

  • Swift 数组到元组数组

    我有以下两个数组 let xaxis monday tuesday wednesday thursday friday let yaxis 1 2 3 4 5 我想将它们合并到一个数组中 如下所示 monday 1 tuesday 2 we
  • 使用 requestAnimationFrame 控制 fps?

    这好像是requestAnimationFrame是现在事实上的动画方式 它在大多数情况下对我来说效果很好 但现在我正在尝试做一些画布动画 我想知道 有什么方法可以确保它以特定的 fps 运行吗 我知道 rAF 的目的是为了获得始终如一的平
  • 更改 MySQL Workbench 查询中的注释字体颜色

    是否可以将字体颜色从浅灰色更改为更鲜艳的颜色 GET TODAY S EVENTS ONLY lt this is the font I want to change where event date CURDATE 我目前在 Window
  • ASP.NET 捕获所有路由和转义正斜杠

    我使用 MVC 的包罗万象的路由来提供应用程序中资源的路径 它看起来像这样 routes MapRoute null Resource resourcePath new controller Resource action Open 动作是
  • Guzzle:处理 400 个错误请求

    我在 Laravel 4 中使用 Guzzle 从另一台服务器返回一些数据 但我无法处理错误 400 错误请求 status code 400 reason phrase Bad Request using client gt get ht
  • Github - 流量 - 奇怪的“Git 克隆”统计数据

    我有一个 Github 存储库 其中包含一些令人困惑的 Git 克隆统计信息 如下所示 该存储库没有大量访问者或 Stars 但在 9 月 29 日显示了相对较多的克隆 GitHub流量帮助页面 https help github com
  • 如何在 SVG / raphael 中的贝塞尔曲线末端绘制箭头?

    我有一条由此生成的曲线 var path M x1 toFixed 3 y1 toFixed 3 L arrow left x arrow left y L arrow right x arrow right y L x1 toFixed
  • Python 错误:io.UnsupportedOperation:fileno

    我正在使用服务器和客户端程序here http www bogotobogo com python python network programming tcp server client chat server chat client s
  • 等待 IO 的可重用测试代码

    我正在尝试在 WCF 公开的方法 服务上使用 async await 一切工作正常 但我想模拟实际等待 IO 的服务方法 以便服务调用将注册到 IO 完成端口 并将线程放回到线程池中 澄清一下 我只是尝试确认 IO 完成端口的使用情况 并更
  • 通过 Wi-Fi 扫描 MFI 产品

    在 iOS 8 中 Apple 允许我们通过 Wifi direct 连接到设备并与其共享 WiFi 网络凭据 我们可以在 wifi 设置页面中执行此操作 也可以在应用程序中执行此操作 我正在尝试启动扫描来查找 wifi MFI 设备 我可
  • 从 aws lambda 函数调用 django 函数视图

    我想在 AWS Lambda 上运行我的 django 视图 为此 我创建了一个 lambda 函数来调用该视图函数 AWS lambda 函数是这样的 gt import app views as v def functionA hand
  • 日语 COBOL 代码:G 文字和标识符的规则?

    我们正在处理IBMEnterprise日语COBOL源代码 准确描述 G 类型文字中允许的内容的规则 标识符的允许范围尚不清楚 IBM 手册指出 G 文字 引号内的第一个字符必须为 SHIFT OUT 以及 SHIFT IN 作为结束引号之
  • 如何在不使用任何第三方库的情况下在C++中反序列化json字符串[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在 vc 创建一个应用程序以 j
  • Jenkins 与 Jest 集成

    有没有办法将 Jenkins 集成到基于 Jasmine 构建的 Javascript Jest 测试框架中 我尝试将 Jest 与茉莉花记者 https github com larrymyers jasmine reporters 但未
  • R 中 LINQ 风格的数据操作

    我感兴趣 R 中是否有一个包支持调用链式数据操作 例如 C LINQ F 我想启用这样的样式 var list new 1 5 10 12 1 var newList list Where x gt x gt 5 GroupBy x gt
  • 在 for 循环内动态创建按钮以在滚动视图中使用

    我在动态创建按钮时遇到问题 我使用了提供的帮助如何在 Android 中动态创建按钮 https stackoverflow com questions 3011092 how can i dynamically create a butt
  • 每两个表行的第 n 个子级

    我需要将表格的每两行设为灰色 如果可能的话 我更愿意使用 nth child 我已经搞乱了Chris Coyier 的第 n 个孩子测试员 http css tricks com examples nth child tester 但仍然无
  • 在 Haskell 中快速更新大状态

    对于 Haskell 中的矢量图形库 我必须携带一个相当大的状态 线条描边参数 颜色 剪辑路径等 我知道有两种方法可以做到这一点 引用来自的评论哈斯克尔咖啡馆 http www mail archive com haskell cafe h
  • Angular 2 JSONP注入脚本没有调用回调错误

    我正在 localhost 3000 上使用 npm 服务器运行应用程序 服务文件 import Injectable from angular core import Jsonp from angular http import rxjs
  • 为什么在 Java 中要在单独的文件中声明枚举?

    为什么这个枚举在它自己的文件中声明 这样做有什么好处吗 另外我如何才能将其放入两个文件之一中 我真的不知道我在做什么 还请用简单的方式解释一下 因为这是教科书示例 而且我对 Java 还很陌生 刻度名称 java enum ScaleNam