枚举与常量 java_java – 为什么两个枚举常量可以在同一行中使用?
我将尝试在上述评论中添加更多内容.
枚举值有些特殊.从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 – 为什么两个枚举常量可以在同一行中使用?相关推荐
- C++类的常量数据成员,静态数据成员,常量静态数据成员,枚举类型
文章目录 C++类的常量数据成员,静态数据成员,常量静态数据成员 const成员 static成员 静态整型常量数据成员 C++枚举类型 C++中作用域受限的枚举类型 经典做法 C++11的枚举类 C ...
- java的枚举类型是什么_什么是枚举(java枚举类型enum用法)
最佳回答 枚举 1.枚举 (enumeration) 值类型的一种特殊形式,它从 System.Enum 继承,并为基础基元类型的值提供备用名称.枚举类型有名称.基础类型和一组字段.基础类型. &qu ...
- Java为枚举类创建成员变量_Java学习——枚举类
Java学习--枚举类 摘要:本文主要介绍了Java的枚举类. 部分内容来自以下博客: https://www.cnblogs.com/sister/p/4700702.html https://bl ...
- c语言枚举类型enum用法参数,C语言枚举类型(Enum)
在实际编程中,有些数据的取值往往是有限的,只能是非常少量的整数,并且最好为每个值都取一个名字,以方便在后续代码中使用,比如一个星期只有七天,一年只有十二个月,一个班每周有六门课程等. 以每周七天为例, ...
- desc 枚举类型id_枚举系列(四):实现接口的枚举类
枚举类也可以实现一个或者多个接口.与普通实现一个或者多个接口完全一样,枚举类实现一个或者多个接口时,也需要实现该接口所包含的方法.下面程序定义了一个GenderDesc接口. public inter ...
- 判断字段是否与枚举相同_Scala基础学习九之枚举和Trait了解
scala枚举 枚举:Scala不支持enum关键字,通过继承Enumeration类实现枚举 枚举通常用来定义已知数量的常量,比如月份,星期,季节等等 定义一个星期的枚举 并定义一个打印所有值的方法 ...
- 枚举类型enum例题_10.1 C++枚举类型
C++枚举类型 在C++中,如果一个变量只有几种可能的值,可以定义为枚举类型.枚举是指将变量的值一一列举出来,变量的值只能在列举出来的值的范围内. C++声明枚举类型用enum开头. enum wee ...
- c枚举类型enum例题_c语言之枚举类型(enum)
1 枚举类型 1 . 如果一个变量只有几种可能的值,则可以定义为"枚举类型":所谓"枚举"就是把可能的值一一的列举出来,变量的值只限于列举出来的值的范围, 如: ...
- python读取枚举_一文读懂Python 枚举
enum是一组绑定到唯一常数值的符号名称,并且具备可迭代性和可比较性的特性.我们可以使用 enum 创建具有良好定义的标识符,而不是直接使用魔法字符串或整数,也便于开发工程师的代码维护. 创建枚举 我 ...
最新文章
- 目标检测算法Faster R-CNN简介
- linux代码调节亮度,linux 屏幕亮度调整命令
- Linux 创建桌面应用程序图标 (Ubuntu 18.04 16.04、Linux Mint、Deepin、等均适用 )
- 数组名的地址,和数组名取地址的讨论
- 【转】c++ http下载文件
- (转)Cobbler无人值守批量安装Linux系统
- PostgreSQL用户角色和权限管理
- vestacp调整php.ini,VestaCP中roundcube的SMTP配置方法
- android+动态隐藏图标,2018安卓手机怎么隐藏图标 进入隐藏应用界面
- vue.js中修饰符.stop的用法。
- 前有阿里巴巴,后有拼多多,网易考拉要去哪儿?
- 轻量级网络:ResNeXt
- 树与二叉树——有关n叉树的若干问题
- Numpy 怎么把arange ()产生的列表 变成一个行向量或者列向量
- 轻松搞定分组报表中的各种排序
- Cozmo人工智能机器人SDK使用笔记(6)-并行部分Parallel_Action
- Python数据挖掘与机器学习_通信信用风险评估实战(1)——读数据
- CEM计算电磁学 -- Lecture 1 学习笔记 (2) --- 极化、反射、透射
- 使用phpredis批量向sort set中加入元素
- 【计算机原理与接口技术(UNIX)⑰】——微型计算机系统的串行通信 [ 8250 + 具体样例 + 上机实验]
热门文章
- 万物新生(爱回收)递交赴美上市招股书,平台服务收入年复合增长达627.7%
- 种草之火,何以燎原?
- 现行高考政策公平 辩论_为这些考生高考加20分?这样的政策对其他考生公平吗?榕和奉献...
- 清空mysql注册表步骤_完全卸载MySQL 数据库清空MySql注册表
- tns03505 无法解析名称_SpringBootWeb源码解析SpringMVC自动配置
- Python的线性查找(作业)
- css+隐藏+左侧菜单栏,放在网页左侧的DIV+CSS隐藏菜单代码
- java 图片合成pdf_java将多张图片合并转为PDF
- 区间比较_Simulink(离散PIDamp;区间检测模块)+AURIX功能安全板过流比较电路+电机结构应用与工作原理学习网站...
- java字面量 方法区_(一)java的内存模型