1.伙计,枚码ja枚Go项目怎么使用枚举?
2.JDK 1.5的举源举状JDK 1.5 部分新特性
3.java中枚举类型enum用法及其背后原理
4.java枚举的几种用法
伙计,Go项目怎么使用枚举?
哈喽,态码大家好,枚码ja枚我是举源举状asong。枚举是态码nginx源码有多大一种很重要的数据类型,在java、枚码ja枚C语言等主流编程语言中都支持了枚举类型,举源举状但是态码在Go语言中却没有枚举类型,那有什么替代方案吗?本文我们来聊一聊这个事情;
为什么要有枚举?我们以java语言为例子,枚码ja枚在JDK1.5之前没有枚举类型,举源举状我们通常会使用int常量来表示枚举,态码一般使用如下:
使用int类型会存在以下隐患:
于是枚码ja枚乎我们就想到用常量字符来表示,代码就变成了这样:
这样也同样存在问题,举源举状因为我们使用的态码常量字符,那么有些程序猿不按套路出牌就可以使用字符串的值进行比较,这样的代码会被不断模仿变得越来越多的,然后屎山就出现了;
所以我们迫切需要枚举类型的出现来起到约束的作用,假设使用一个枚举类型做入参,easyuipanel源码枚举类型就可以限定沙雕用户不按套路传参,这样就可以怼他了,哈哈~;
使用枚举的代码就可以变成这样,传了枚举之外的类型都不可以了;
Go语言就没有枚举类型,我们该使用什么方法来替代呢?
定义新类型实现枚举:枚举通常是一组相关的常量集合,Go语言中有提供常量类型,所以我们可以使用常量来声明枚举,但也同样会遇到上述的问题,起不到约束的作用,所以为了起到约束我们可以使用Go语言另外一个知识点 -- 类型定义,Go语言中可以使用type关键字定义不同的类型,我们可以为整型、浮点型、字符型等定义新的类型,新的类型与原类型转换需要显式转换,这样在一定程度上也起到了约束的作用,我们就可以用Go语言实现如下枚举:
上面的代码就会报错:
定义新的类型可以起到约束作用,比如我们要检查状态机,GitHubvb源码入参限定了必须是OrderStatus类型,如果是int类型就会报错。
上面我们的枚举实现方式只能获取枚举值,获取不到其映射的字面意思,所以我们可以优化一下,实现String方法,使用官方提供的cmd/string来快速实现,代码如下:
执行命令go generate ./...生成orderstatus_string.go文件:
上面我们的枚举实现方式就能获取枚举值及其映射的字面意思。
总结:虽然Go语言没有提供枚举类型,但是我们也可以根据Go语言的两个特性:常量和定义新类型来实现枚举,方法总比困难多吗,开源库是优秀的,我们往往可以从高手那里里学习很多,记住,请永远保持一个学徒之心;
好啦,本文到这里就结束了,我是asong,我们下期见。cubeescape源码
JDK 1.5的JDK 1.5 部分新特性
JDK1.5的一个重要主题就是通过新增一些特性来简化开发,这些特性包括泛型,for-each 循环,自动装包/拆包,枚举,可变参数, 静态导入 。使用这些特性有助于我们编写更加清晰,精悍,安全的代码。
下面我们简单介绍一下这些新特性。
1.泛型(Generic)
C++通过模板技术可以指定集合的元素类型,而Java在1.5之前一直没有相对应的功能。一个集合可以放任何类型的对象,相应地从集合里面拿对象的时候我们也不得不对他们进行强制得类型转换。1.5引入了泛型,它允许指定集合里元素的类型,这样你可以得到强类型在编译时刻进行类型检查的好处。
Collection c = new ArrayList();
c.add(new Date());
编译器会给出一个错误,ty源码
add(java.lang.String) in java.util.Collection cannot be applied to (java.util.Date)
2.For-Each循环
For-Each循环得加入简化了集合的遍历。假设我们要遍历一个集合对其中的元素进行一些处理。典型的代码为:
void processAll(Collection c){
for(Iterator i=c.iterator(); i.hasNext();){
MyClass myObject = (MyClass)i.next();
myObject.process();
}
}
使用For-Each循环,我们可以把代码改写成,
void processAll(Collection c){
for (MyClass myObject :c)
myObject.process();
}
这段代码要比上面清晰许多,并且避免了强制类型转换。
3.自动装包/拆包(Autoboxing/unboxing)
自动装包/拆包大大方便了基本类型数据和它们包装类地使用。
自动装包:基本类型自动转为包装类.(int Integer)
自动拆包:包装类自动转为基本类型.(Integer int)
在JDK1.5之前,我们总是对集合不能存放基本类型而耿耿于怀,现在自动转换机制解决了我们的问题。
int a = 3;
Collection c = new ArrayList();
c.add(a);//自动转换成Integer.
Integer b = new Integer(2);
c.add(b + 2);
这里Integer先自动转换为int进行加法运算,然后int再次转换为Integer.
4.枚举(Enums)
JDK1.5加入了一个全新类型的“类”-枚举类型。为此JDK1.5引入了一个新关键字enmu. 我们可以这样来定义一个枚举类型。
public enum Color
{
Red,
White,
Blue
}
然后可以这样来使用Color myColor = Color.Red.
枚举类型还提供了两个有用的静态方法values()和valueOf(). 我们可以很方便地使用它们,例如
for (Color c : Color.values())
System.out.println(c);
5.可变参数(Varargs)
可变参数使程序员可以声明一个接受可变数目参数的方法。注意,可变参数必须是函数声明中的最后一个参数。假设我们要写一个简单的方法打印一些对象,
util.write(obj1);
util.write(obj1,obj2);
util.write(obj1,obj2,obj3);
…
在JDK1.5之前,我们可以用重载来实现,但是这样就需要写很多的重载函数,显得不是很有效。如果使用可变参数的话我们只需要一个函数就行了
public void write(Object... objs) {
for (Object obj: objs)
System.out.println(obj);
}
在引入可变参数以后,Java的反射包也更加方便使用了。对于c.getMethod(test, new Object[0]).invoke(c.newInstance(), new Object[0])),
现在我们可以这样写了c.getMethod(test).invoke(c.newInstance()),这样的代码比原来清楚了很多。
6.静态导入(Static Imports)
要使用用静态成员(方法和变量)我们必须给出提供这个方法的类。使用静态导入可以使被导入类的所有静态变量和静态方法在当前类直接可见,使用这些静态成员无需再给出他们的类名。
import static java.lang.Math.*;
…….
r = sin(PI * 2); //无需再写r = Math.sin(Math.PI);
不过,过度使用这个特性也会一定程度上降低代码地可读性。
java中枚举类型enum用法及其背后原理
Enum枚举类型
在Java中,枚举类型(全称为Enumeration)是用于定义一组预定义的常量集合的数据类型。它确保变量的值仅限于特定范围,如季节只有春、夏、秋、冬,月份则是固定十二个。
Java中的枚举
在Java 1.5之前,实现枚举功能通常采用接口静态常量或类静态常量,这虽然可以实现,但定义繁琐,且难以限制变量范围。
Java枚举的定义
引入Java枚举类型(使用enum关键字)后,定义变得简洁明了。例如,定义季节枚举类如下:
在枚举类中,常量遵循大写规则,每个枚举成员默认为final、public、static,且可直接通过枚举名.成员名方式调用。
枚举成员是枚举类的实例,可以视为类的实例化。
Java枚举类的特性
Java枚举类具有特性包括:不能继承接口,但可以实现接口;是final类,不能被继承;构造方法私有,成员为静态、final和public。
Java枚举类实现的原理探求
Java编译器在编译枚举类时,自动扩展并生成一个继承自java.lang.Enum的类。通过JDK自带工具javap反编译生成的.class文件,可以发现:
枚举类自动继承java.lang.Enum,成员变量转化为private static final的枚举实例,且自动添加了private构造函数。
这些特性由编译器在编译阶段实现,使用特定的Java反编译工具,如JD GUI、luyten等,也能获取相似信息。
java枚举的几种用法
以下是改写后的文章内容:
Java枚举提供了多种实用的用法,让我们能够更好地组织代码和提升可读性。以下是其中的一些关键应用:常量和分组:枚举允许你创建一组相关的常量,例如在 Color 枚举中定义不同颜色,如 public enum Color { RED, GREEN, BLANK, YELLOW},这使得代码更清晰。
增强switch语句:在JDK1.6之后,枚举支持在switch中使用,如在TrafficLight类中的 public void change() { switch (color) { ...,提高代码可读性。
自定义方法:枚举类型可以添加自定义方法,如Color枚举中的getName和setIndex方法,增强了枚举的灵活性。
覆盖方法:例如,toString方法可以被覆盖,以提供更个性化的表示,如 @Override public String toString() { ...。
实现接口:所有枚举都继承自Enum,如Color枚举实现Behaviour接口,便于统一管理和扩展。
接口组织枚举:通过接口如Food,可以将相关的枚举类型如Coffee和Dessert组织起来,便于管理和调用,如 public interface Food { enum Coffee...。
总的来说,Java枚举为常量管理和代码组织提供了强大且灵活的工具,提高了代码的可读性和可维护性。2024-12-22 10:00
2024-12-22 09:44
2024-12-22 09:29
2024-12-22 09:00
2024-12-22 08:34
2024-12-22 07:36