您的位置:首页 > 其它

枚举&注解

2015-04-14 11:39 162 查看
一、枚举:枚举本质上也是一个类

①枚举的定义:

 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在被继承后仍保留在子类中
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: