使用到的Enum如下:
public enum Colour{
RED(113001, "红色"),
BLUE(113002, "蓝色");
private int code;
private String name;
Colour(int code,String name){
this.code= code;
this.name= name;
}
public String toName() {
return this.name == null ? this.name() : this.name;
}
public int toCode() {
return this.code == null ? this.ordinal() : this.code;
}
}
页面显示的时候会使用到下拉框,这样就需要把枚举的name和code遍历到一个map中,再转后为json串,供前台页面使用。使用下面的方式和容易实现这一点:
public static Map<Integer, String> toCodeDescriptionMap() {
LinkedHashMap<Integer, String> map = new LinkedHashMap<Integer, String>();
for (int i = 0; i < Colour.values().length; i++) {
map.put(Colour.values()[i].toCode(), Colour.values()[i].toDescription());
}
return map;
}
由于使用到类似的枚举类型还有很多,这样的话就需要在每个枚举里面添加同样的代码。所以考虑提供一个公用的方法,传入枚举类型,就能转换出一个map。代码如下:
public static Map<Integer, String> toCodeDescriptionMap(Enum em) {
Class clazz = em.getDeclaringClass();
LinkedHashMap<Integer, String> map = new LinkedHashMap<String, String>();
try {
Method toName = clazz.getMethod("toName");
Method toCode = clazz.getMethod("toCode");
//得到enum的所有实例
Object[] objs = clazz.getEnumConstants();
for (Object obj : objs) {
map.put((Integer)toCode.invoke(obj),(String)toName.invoke(obj));
}
return map
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
调用的方式:
toCodeDescriptionMap(Colour.RED);
Enum类的一些特点:
1、Color枚举类就是class,而且是一个不可以被继承的final类。枚举值都是public static final的,也就是我们经常所定义的常量方式,因此枚举类中的枚举值最好全部大写。
2、即然枚举类是class,当然在枚举类型中有构造器,方法和数据域。但是,枚举类的构造器有很大的不同:
(1) 构造器只是在构造枚举值的时候被调用。
(2) 构造器只能私有private,绝对不允许有public构造器。
(3) 枚举值必须要类的最前面。
3、所有枚举类都继承了Enum的方法,具有这些方法。
(1) ordinal()方法: 返回枚举值在枚举类种的顺序。这个顺序根据枚举值声明的顺序而定。
Color.RED.ordinal(); //返回结果:0
Color.BLUE.ordinal(); //返回结果:1
(2) compareTo()方法: Enum实现了java.lang.Comparable接口,因此可以比较象与指定对象的顺序。Enum中的compareTo返回的是两个枚举值的顺 序之差。当然,前提是两个枚举值必须属于同一个枚举类,否则会抛出ClassCastException()异常。(具体可见源代码)
Color.RED.compareTo(Color.BLUE); //返回结果 -1
(3) values()方法: 静态方法,返回一个包含全部枚举值的数组。
Color[] colors=Color.values();
for(Color c:colors){
System.out.print(c+",");
}//返回结果:RED,BLUE,BLACK YELLOW,GREEN,
(4) toString()方法: 返回枚举常量的名称。
Color c=Color.RED;
System.out.println(c);//返回结果: RED
(5) valueOf()方法: 这个方法和toString方法是相对应的,返回带指定名称的指定枚举类型的枚举常量。
Color.valueOf("BLUE"); //返回结果: Color.BLUE
(6) equals()方法: 比较两个枚举类对象的引用。
4、枚举类可以在switch语句中使用。
分享到:
相关推荐
7. **自定义属性**:VB.NET中的自定义属性提供了元数据信息,反射可以用于读取这些信息,帮助程序在运行时了解对象的附加信息。 8. **安全性考虑**:虽然反射提供了极大的灵活性,但使用不当也可能引入安全风险,...
在C#编程中,反射被广泛用于元数据的获取、动态类型创建、方法调用以及属性和字段的访问等场景。下面我们将深入探讨C#反射的相关知识点。 一、类型信息获取 1. 获取Type对象:`typeof`关键字用于获取已知类型的`...
注解的属性可以是基本数据类型、String、Class、Enum、Annotation 等。我们可以使用 `@MyAnnotation(getValue = "annotation on class")` 这样的方式来给注解赋值。 特别的属性:value 和数组 注解的属性可以是...
- **访问属性和字段**:即使在编码时无法直接访问,反射也能让我们读取和修改对象的私有属性和字段。 - **元数据获取**:获取类型、接口、构造函数等的详细信息,如继承关系、实现的接口、方法签名等。 - **序列...
Java反射机制是Java编程语言中的一个重要特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射机制的核心类集中在java.lang.reflect包下,包括Class、Constructor、Method和...
在枚举中,我们可以为每个枚举项添加`DescriptionAttribute`,然后在`PropertyGrid`中通过反射读取这些描述,以中文形式展示。以下是一个简单的示例: ```csharp public enum Color { [Description("红色")] Red,...
Java中的反射机制是Java语言提供的一种强大的工具,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。反射在许多高级编程任务中扮演着关键角色,比如动态加载类、创建对象、访问私有成员、调用...
Java反射的核心在于`java.lang.Class`类,它代表了类的信息,通过反射可以获取到类的所有属性、方法、构造器等。例如,以下代码展示了如何使用反射判断一个对象所属的类: ```java A a = new A(); if (a.getClass()...
反射可以用来访问对象的私有属性。 #### 调用对象的方法 反射还可以用来调用对象的私有方法。 #### 数组的反射 `java.lang.reflect.Array`类提供了处理数组的方法。 ### 线程 Java的多线程模型基于线程类`...
反射还可以帮助处理枚举,通过`Enum.GetNames()`和`Enum.GetValues()`获取枚举的名称和值数组。 6. **泛型类型**: 反射也能处理泛型类型,`MakeGenericType()`方法允许我们创建指定类型的实例,甚至可以传入参数...
验证工具类需要能够读取到类上的注解信息,并根据这些信息执行相应的验证逻辑。具体来说,包括以下几个方面: - **枚举定义**:定义枚举`VerifyWay`,用于表示不同的验证策略,比如`GreaterThan`、`LessThan`、`...
在实际开发中,`QMetaProperty`常用于动态构建UI、反射机制、序列化/反序列化、以及自定义的属性系统。例如,当你需要根据数据模型动态生成界面元素时,可以通过`QMetaProperty`获取模型中每个字段的信息,然后创建...
Attribute标记属性在.NET框架中扮演着重要的角色,它是元数据的一部分,允许我们在代码中附加信息,这些信息在程序运行时可以被编译器、运行时或其他工具读取和使用。Attribute提供了一种灵活的方式来注解类、方法、...
`RetentionPolicy.RUNTIME`则表明注解在运行时仍可被JVM读取,通常用于运行时反射。 3. **@Documented**: `@Documented`元注解指示Javadoc等文档工具应将注解包含在生成的文档中,使其成为公共API的一部分。这...
然后在方法上使用这个注解,并在运行时通过反射获取并处理这个注解的信息。 枚举类和注解结合使用可以实现更高级的功能。例如,使用枚举表示不同的日志级别,然后通过注解标记需要根据日志级别的方法: ```java ...
在读取配置文件等场景下,使用单例模式可以有效地管理配置对象,确保数据一致性并节约系统资源。通过多种实现方式,如饿汉式、懒汉式、静态内部类和枚举单例,可以根据需求选择最适合的实现策略。
- 可以使用`@interface`关键字定义注解,然后使用反射来读取注解信息。 ##### 3. 为注解增加各种属性 - 注解可以包含各种属性,如字符串、数字、其他注解等。 #### 七、Java5的泛型 ##### 1. 泛型的基本应用 - ...
- **反射与注解**:使用反射 API,可以读取类、方法、字段上的注解,从而实现动态处理。 以上是对 JDK 1.5 及其后续版本中泛型、枚举和注解的简要介绍。这些特性不仅提高了代码的健壮性,还简化了开发流程,使 Java...
这些信息可以在运行时被反射机制读取,从而实现各种功能。在标题“C#特性Attribute的实际应用之:为应用程序提供多个版本”中,我们可以看到一个具体的应用场景,即利用特性来区分和管理应用程序的不同版本,如体验...