我将尝试在上述评论中添加更多内容.

枚举值有些特殊.从Java枚举的Wikipedia条目开始:

An enum type in Java is actually a special compiler-generated class rather than an arithmetic type, and enum values behave as global pre-generated instances of that class. Enum types can have instance methods and a constructor (the arguments of which can be specified separately for each enum value).

因此,虽然它们仅在编译时生成一次,但它们是给定枚举类型的特殊实例.因此,它可以访问该类的其他成员.请注意,这也意味着您无法自己实例化枚举类型(即使用new).

From one instance of enum class you can access another instance of same enum class? Which I haven’t seen in normal Java class.

这在普通类中也是可能的,虽然不赞成,因为它没有提供任何实际好处,甚至可能导致问题和错误(通过NullPointerExceptions).

考虑以下两个类:

public class SomeClass

{

public final static int MODE = 1;

private String message;

public SomeClass(String message)

{

this.message = message;

}

}

public class Test

{

public static void main(String[] args)

{

SomeClass myObject = new SomeClass("bla");

System.out.println(myObject.MODE);

System.out.println(OtherClass.MODE);

}

}

这只会打印出来:

1

1

但是,假设您正在执行某些任务,其中您迭代SomeClass对象的列表,其中某些条目可能为null(可能是因为它们在某些时候从集合中删除,或者因为在插入时允许空条目为原因).

在这种情况下,如果您通过实例访问静态成员,您将获得NPE,而通过类本身访问它将按预期工作.

请注意,问题中描述的行为特定于枚举类型本身(即Currency.NICKLE.DIME …).有一种方法可以模仿这种行为,如下所示:

public class SomeClass

{

public static SomeClass REF; // not final anymore since 'this' must be the first line in a constructor call

public String message; // note this is public now

public SomeClass(String message)

{

this.message = message;

}

public void setRef() {

REF = this;

}

}

public class Test

{

public static void main(String[] args)

{

SomeClass myObject = new SomeClass("bla!");

System.out.println(myObject.REF);

System.out.println(SomeClass.REF);

myObject.setRef();

System.out.println(SomeClass.REF);

System.out.println(SomeClass.REF.message);

}

}

这将打印出来:

null

null

SomeClass@... // Object.toString() call

bla!

但是使用这种糟糕的技术和许多缺点绝对没有任何好处.

枚举与常量 java_java – 为什么两个枚举常量可以在同一行中使用?相关推荐

  1. C++类的常量数据成员,静态数据成员,常量静态数据成员,枚举类型

    文章目录 C++类的常量数据成员,静态数据成员,常量静态数据成员 const成员 static成员 静态整型常量数据成员 C++枚举类型 C++中作用域受限的枚举类型 经典做法 C++11的枚举类 C ...

  2. java的枚举类型是什么_什么是枚举(java枚举类型enum用法)

    最佳回答 枚举 1.枚举 (enumeration) 值类型的一种特殊形式,它从 System.Enum 继承,并为基础基元类型的值提供备用名称.枚举类型有名称.基础类型和一组字段.基础类型. &qu ...

  3. Java为枚举类创建成员变量_Java学习——枚举类

    Java学习--枚举类 摘要:本文主要介绍了Java的枚举类. 部分内容来自以下博客: https://www.cnblogs.com/sister/p/4700702.html https://bl ...

  4. c语言枚举类型enum用法参数,C语言枚举类型(Enum)

    在实际编程中,有些数据的取值往往是有限的,只能是非常少量的整数,并且最好为每个值都取一个名字,以方便在后续代码中使用,比如一个星期只有七天,一年只有十二个月,一个班每周有六门课程等. 以每周七天为例, ...

  5. desc 枚举类型id_枚举系列(四):实现接口的枚举类

    枚举类也可以实现一个或者多个接口.与普通实现一个或者多个接口完全一样,枚举类实现一个或者多个接口时,也需要实现该接口所包含的方法.下面程序定义了一个GenderDesc接口. public inter ...

  6. 判断字段是否与枚举相同_Scala基础学习九之枚举和Trait了解

    scala枚举 枚举:Scala不支持enum关键字,通过继承Enumeration类实现枚举 枚举通常用来定义已知数量的常量,比如月份,星期,季节等等 定义一个星期的枚举 并定义一个打印所有值的方法 ...

  7. 枚举类型enum例题_10.1 C++枚举类型

    C++枚举类型 在C++中,如果一个变量只有几种可能的值,可以定义为枚举类型.枚举是指将变量的值一一列举出来,变量的值只能在列举出来的值的范围内. C++声明枚举类型用enum开头. enum wee ...

  8. c枚举类型enum例题_c语言之枚举类型(enum)

    1 枚举类型 1 . 如果一个变量只有几种可能的值,则可以定义为"枚举类型":所谓"枚举"就是把可能的值一一的列举出来,变量的值只限于列举出来的值的范围, 如: ...

  9. python读取枚举_一文读懂Python 枚举

    enum是一组绑定到唯一常数值的符号名称,并且具备可迭代性和可比较性的特性.我们可以使用 enum 创建具有良好定义的标识符,而不是直接使用魔法字符串或整数,也便于开发工程师的代码维护. 创建枚举 我 ...

最新文章

  1. 目标检测算法Faster R-CNN简介
  2. linux代码调节亮度,linux 屏幕亮度调整命令
  3. Linux 创建桌面应用程序图标 (Ubuntu 18.04 16.04、Linux Mint、Deepin、等均适用 )
  4. 数组名的地址,和数组名取地址的讨论
  5. 【转】c++ http下载文件
  6. (转)Cobbler无人值守批量安装Linux系统
  7. PostgreSQL用户角色和权限管理
  8. vestacp调整php.ini,VestaCP中roundcube的SMTP配置方法
  9. android+动态隐藏图标,2018安卓手机怎么隐藏图标 进入隐藏应用界面
  10. vue.js中修饰符.stop的用法。
  11. 前有阿里巴巴,后有拼多多,网易考拉要去哪儿?
  12. 轻量级网络:ResNeXt
  13. 树与二叉树——有关n叉树的若干问题
  14. Numpy 怎么把arange ()产生的列表 变成一个行向量或者列向量
  15. 轻松搞定分组报表中的各种排序
  16. Cozmo人工智能机器人SDK使用笔记(6)-并行部分Parallel_Action
  17. Python数据挖掘与机器学习_通信信用风险评估实战(1)——读数据
  18. CEM计算电磁学 -- Lecture 1 学习笔记 (2) --- 极化、反射、透射
  19. 使用phpredis批量向sort set中加入元素
  20. 【计算机原理与接口技术(UNIX)⑰】——微型计算机系统的串行通信 [ 8250 + 具体样例 + 上机实验]

热门文章

  1. 万物新生(爱回收)递交赴美上市招股书,平台服务收入年复合增长达627.7%
  2. 种草之火,何以燎原?
  3. 现行高考政策公平 辩论_为这些考生高考加20分?这样的政策对其他考生公平吗?榕和奉献...
  4. 清空mysql注册表步骤_完全卸载MySQL 数据库清空MySql注册表
  5. tns03505 无法解析名称_SpringBootWeb源码解析SpringMVC自动配置
  6. Python的线性查找(作业)
  7. css+隐藏+左侧菜单栏,放在网页左侧的DIV+CSS隐藏菜单代码
  8. java 图片合成pdf_java将多张图片合并转为PDF
  9. 区间比较_Simulink(离散PIDamp;区间检测模块)+AURIX功能安全板过流比较电路+电机结构应用与工作原理学习网站...
  10. java字面量 方法区_(一)java的内存模型