枚举&注解

来源:互联网 发布:夏季联赛数据 编辑:程序博客网 时间:2024/06/05 08:14

一、枚举:枚举本质上也是一个类

①枚举的定义:

 public enum Action {
    TURN_LEFT,
    TURN_RIGHT,
    SHOOT
}

---------------

public enum DetailAction2 {
    TURN_LEFT("向左转"), TURN_RIGHT("向右转"), SHOOT("射击");
 
    private String description;
 
     // 不公开的构造函数
    private DetailAction2(String description) {
        this.description = description;
    }
 
    public String getDescription() {
        return description;
    }
}

-------------------

public class EnumDemo2 {
    private enum InnerAction {TURN_LEFT, TURN_RIGHT, SHOOT};

    public static void main(String[] args) {
        doAction(InnerAction.TURN_RIGHT);
    }
 
    public static void doAction(InnerAction action) {
        switch(action) {
            case TURN_LEFT:
                System.out.println("向左转");
                break;
            case TURN_RIGHT:
                System.out.println("向右转");
                break;
            case SHOOT:
                System.out.println("射击");
                break;
        }
    }
}

--------------------------

②枚举类的实现:

public enum MoreAction2 {
    TURN_LEFT {
        // 操作抽象方法
        public String getDescription() {
            return "向左转";
        }
    },  // 记得这里的枚举值分隔使用
 
    TURN_RIGHT {
        // 操作抽象方法
        public String getDescription() {
            return "向右转";
        }
    },// 记得这里的枚举值分隔使用
 
    SHOOT {
       // 操作抽象方法
        public String getDescription() {
            return "射击";
        }
    }; // 记得这里的枚举值结束使用

    // 声明个抽象方法
    public abstract String getDescription();
}


二、注解

①:常用的注解:

 --- @Oberride  :重写

 --- @Deprecated :该方法不建议使用,会报警告

 --- @SuppressWarnings(value={"XXX"})  :忽略XXX的警告

package onlyfun.caterpillar;

import java.util.*;

public class SomeClass2 {
    @SuppressWarnings(value={"unchecked"})
    public void doSomething() {
        Map map = new HashMap();
        map.put("some", "thing");
    }
}

②:自定义注解以及使用:

 package onlyfun.caterpillar;

public @interface UnitTest {
     String value();
}

使用:

public class MathTool{

@UnitTest("gbd")

public void show(){}

}

------------------------

package onlyfun.caterpillar;

public @interface Process {
    public enum Current {NONE, REQUIRE, ANALYSIS, DESIGN, SYSTEM};

    Current current() default Current.NONE;
    String tester();
    boolean ok();
}

使用:

public class Apply{

@Process(

    current=Process.current.ANALYSIS,

    tester="Just",

   ok=true


)

}

-----------

自定义的注解上还可以加注解:metadata

--- @Retention (RetentionPolicy.XXX)

      xxx有三个:SOURCE  :编译器处理完Annotation就可以啦

                           CLASS :编译器将Annotation存储于.class文件中

                          RUNTIME :编译器将Annotation存储于.class文件中,可由vm读入


---- @Target(ElementType.xxxx)

      xxx的选择:

             TYPE  :适用于class、interface、enum

             FIELD :适用于field

            METHOD :适用于方法

            PARAMETER :适用于method上的参数

           CONSTRUCTOR :适用于构造函数

           LOCAL_VARIABLE :适用于区域变量

           ANNOTATION_TYPE :适用于annotation类型

           PACKAGE  :适用于package


-------@Documented :将annotation中的信息加入到文档中

-------@Inherited  :定义的annotation在被继承后仍保留在子类中









0 0