Java 中的枚举类和注解
2021-06-09 06:02
标签:type 编译器 retention 开发者 new img 返回 variable 属性 当需要定义一组常量时,强烈建议使用枚举类。要求类的对象是有限个且是确定的。例如:星期、性别、季节、支付方式... 如果枚举类中只有一个对象,则可以作为单例模式的实现方式。 values():返回枚举类型的对象数组。可以很方便的获取到所有的枚举值 valueOf(String str):把一个字符串转成对应的枚举类对象。(根据指定名找到枚举类对象,返回该对象的对象名。如果找不到,则会报异常) toString():返回当前枚举类对象的名称 示例一:生成文档时的相关注解 @author:开发者的名称,多个开发者之间用逗号隔开 @version:当前模块的版本 @see:参考转向,也就是相关主题 @since:从哪个版本开始增加的 @param:对方法中某个参数的说明,如果没有参数就不能写 @return:对返回值的说明,如果没有返回值就不能写 @exception:对异常的说明,如果异常没有经过throws显示抛出就不能写 示例二:在编译时进行格式检查(JDK中内置的三个基本注解) @Override:限定重写父类方法,该注解只能用于方法 @Deprecated:表明所修饰的元素(类、方法)已经过时 @SuppressWarnings:抑制编译器警告 示例三:跟踪代码的依赖性,实现替代配置文件的功能。例如:@WebServlet、@Transactional、@Test... 自定义注解必须配上自定义注解流程(使用反射)才有意义。通常都会指定Retention和Target两个注解 元注解:用来修饰其他注解的注解。JDK5.0提供了四种mate-annotation。 RetentionPolicy的值: RetentionPolicy.SOURCE:在源文件中有效(即源文件保留),编译器直接丢弃这种这种策略的注释。 RetentionPolicy.CALSS:在class文件中有效(即class保留),当运行Java程序时,JVM不会保留注释。该值是RetentionPolicy的默认值 RetentionPolicy.RUNTIME:在运行时有效(即运行时保留),当运行Java程序时,JVM会保留注释。程序可以通过反射获取该注释。 TYPE:可以用来修饰类 FIELD:可以用来修饰属性 METHOD:可以用来修饰方法 PARAMETER:可以用来修饰形参 CONSTRUCTOR:可以用来修饰构造器 LOCAL_VARIABLE:可以用来修饰局部变量 定义为Documented的注解必须设置Retention的值为RUNTIME。 在自定义的Myannotation上使用注解@Repeatable,成员值为MyAnnotation.class。 MyAnnotation的Target和Retention与MyAnnotation相同。 ElementType.TYPE_PARAMETER:表示该注解能写在类型变量的声明语句中。 ElementType.TYPE_USE:表示该注解能写在使用类型的任何语句中。 Java 中的枚举类和注解 标签:type 编译器 retention 开发者 new img 返回 variable 属性 原文地址:https://www.cnblogs.com/summerHou/p/14497682.htmlJava 中的枚举类和注解
1. 枚举类的使用
如何自定义枚举类(JDK5.0之前)
package com.summer.java;
/**
* @Author 安宁侯
* @create 2021-03-08 6:27
*/
public class MyEnum {
public static void main(String[] args) {
Season season1 = Season.SPRING;
System.out.println(season1);
}
}
//自定义枚举类
class Season{
//1.声明season对象的属性
private final String name;
private final String desc;
//2.私有化构造器
private Season(String name,String desc){
//3.为属性赋值
this.name=name;
this.desc=desc;
}
//4.定义枚举类的对象:public static final
public static final Season SPRING=new Season("春天","温暖");
public static final Season SUMMER=new Season("夏天","炎热");
public static final Season AUTUMN=new Season("秋天","清爽");
public static final Season WINTER=new Season("冬天","寒冷");
public String getName() {
return name;
}
public String getDesc() {
return desc;
}
@Override
public String toString() {
return "Season{" +
"name=‘" + name + ‘\‘‘ +
", desc=‘" + desc + ‘\‘‘ +
‘}‘;
}
}
如何使用关键字enum自定义枚举类(JDK5.0)
package com.summer.java;
/**
* @Author 安宁侯
* @create 2021-03-08 6:46
*/
public class MyEnum1 {
public static void main(String[] args) {
MySeason spring = MySeason.SPRING;
System.out.println(spring);
}
}
/*
使用enum定义枚举类时,默认继承于java.lang.enum
*/
enum MySeason{
//1.提供当前枚举类的对象,多个对象值之间用逗号隔开,最后一个用分号结尾
SPRING("春天","温暖"),
SUMMER("..",".."),
AUTUMN("..",".."),
WINTER("..","..");
private final String name;
private final String desc;
//2.私有化构造器
private MySeason(String name,String desc){
//3.为属性赋值
this.name=name;
this.desc=desc;
}
@Override
public String toString() {
return "MySeason{" +
"name=‘" + name + ‘\‘‘ +
", desc=‘" + desc + ‘\‘‘ +
‘}‘;
}
}
Enum类的主要方法
public class MyEnum1 {
public static void main(String[] args) {
MySeason spring = MySeason.SPRING;
//toString
System.out.println(spring);
//values
for (int i = 0; i ) {
System.out.println(MySeason.values()[i]);
}
//valueOf
System.out.println(MySeason.valueOf("WINTER"));
}
}
实现接口的枚举类
//valueOf
System.out.println(MySeason.valueOf("WINTER"));
MySeason.AUTUMN.show();
}
}
/*
使用enum定义枚举类时,默认继承于java.lang.enum
*/
interface Info{
void show();
}
enum MySeason implements Info{
//1.提供当前枚举类的对象,多个对象值之间用逗号隔开,最后一个用分号结尾
SPRING("春天","温暖"){
@Override
public void show() {
System.out.println("这是春天");
}
},
SUMMER("..",".."){
@Override
public void show() {
System.out.println("这是夏天");
}
},
AUTUMN("..",".."){
@Override
public void show() {
System.out.println("这是秋天");
}
},
WINTER("..",".."){
@Override
public void show() {
System.out.println("这是冬天");
}
};
private final String name;
private final String desc;
//2.私有化构造器
private MySeason(String name,String desc){
//3.为属性赋值
this.name=name;
this.desc=desc;
}
}
2. 注解的使用
常见的annotation示例
自定义Annotation
//@MyAnnotation(value = "hello")//使用注解
@MyAnnotation//此时使用的是默认值hello
public @interface MyAnnotation {//1.声明注解类
String value() default "hello";
}
JDk中的4种元注解
Retention:只能用来修饰一个annotation定义,用于指定该annotation的生命周期,@Retention包含了一个RetentionPolicy类型的成员变量,使用@Retention注解时必须为该value成员变量指定值。
Target:只能用来修饰一个annotation定义,用于指定该annotation能用来修饰哪些程序元素。@Target也包含了一个名为value的成员变量。
Documented:用于指定被该Annotation修饰的annotation类可以被javadoc工具提取成文档。默认情况下,javadoc是不包含注解的。
Inherited:被该注解修饰的annotation将具有继承性。如果某个类使用了被Inherited修饰的注解,其子类将自动拥有该注解
JDK8中的注解新特性
可重复注解:可重复定义多个的注解
类型注解:
上一篇:Go语言系列-07-函数
下一篇:值得学习的C++项目开源(转)