一、枚举:枚举本质上也是一个类
①枚举的定义:
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在被继承后仍保留在子类中