您的位置:首页 > 其它

枚举,注解

2017-12-07 23:04 211 查看

枚举

enum其实是一个完整的类,它允许添加任意的方法和字段,以及实现接口等。enum类型的对象可以直接比较,也可以被序列化,在序列化过程中不允许对enum类型进行修改。

1.简单的枚举常量

public enum WeekDays {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDY, SATURDAY, SUNDAY
}


2. 向枚举中添加属性

public enum Apple {

AURORA(10), BELMAC(12), CORTLAND(15), EMPIRE(8), GRAVENSTAIN(11);

private int price;
Apple(int price) {
this.price = price;
}

int getPrice() {
return price;
}
}


enum类中的构造函数是受保护的,程序员不能直接调用

3. ordinal和compareTo方法

ordinal代表的是当前枚举常量的序数值,即在常量列表中的位置,从0开始。compareTo则比较当前枚举常量和另一个枚举常量在枚举中的位置,如果以前面的枚举常量作为比较对象。

4. 把方法添加到枚举常量

public enum Converter {

KG("KG") {

@Override
double performConversion(double f) {
return f * 0.45;
}
},
CARAT("carat") {

@Override
double performConversion(double f) {
return f * 2246;
}

};

private final String symbol;

Converter(String symbol) {
this.symbol = symbol;
}
//这里定义一个抽象方法,所以在定义枚举常量的时候,需要实现这个方法
abstract double performConversion(double f);
}


在一个枚举类中如果需要定义一个枚举类变量或方法,那么这个变量或方法应该写在定义的枚举常量之后。而且这个时候在最后一个枚举常量后需要一个分号,如果不需要定义枚举类变量或者方法则不需要分号。

注解

声明注解

Maker 注解

这类注解没有任何元素

@interface WorkInProgress{
}


单值注解

@interface Task {
String description();
}


用法:

@Task(description = "XXXX")
public void doSomething() {
}


多值注解

你可以在注解中添加多个数据成员,如:

@interface Task {
String description();
String TargetDate() default "2010-10-10";
int estimatedHours();
String addtionalNote();
}


用法:

@Task(description = "XXXX",
estimatedHours = 10,
addtionalNote = "XXXX")
public static float ComputeTax(float amount, float rate) {
return 0;
}


String targetDate() default “XXXX”表示被设置了默认值,在使用该注解的时候如果不给定这个数据成员那么它将使用默认值。

可以多个注解同时使用:

@WorkInProgress
@Task(description = "XXXX",
targetDate = "2017-01-01"
estimatedHours = 1,
addtionalNote = "XXXX")
public static float ComputeTax(float amount, float rate) {
return 0;
}


注解类型的定义规则:

1. 注解声明以@interface开始,随后是注解的名称

2. 为了创建注解的参数,需要使用参数的类型声明方法

3. 方法声明不应包含任何参数

4. 方法声明不应包含throws子句

5. 方法的返回类型为:基本类型、String、类、枚举或上述类型的数组结构

为注解添加注解

4种该类型:

Target,Retention,Documentation,InHerited

这种注解被称作元注解,用作注解的注解。

Target注解

用于指定指定代码中哪些元素可以使用已定义的注解。

有一下类型的目标:

ElementType.TYPE:可以应用于类的任何元素

ElementType.METHOD:可以应用于方法

ElementType.FILED:可以应用于字段

ElementType.PARAMETER:可以应用于方法参数

ElementType.CONSTRUCTOR:可以应用于构造函数

ElementType.LOCAL_VARIABLE:可以应用于局部变量

ElementType.ANNOTATION_TYPE:指出声明的类型本身是注解类型

Retention注解

用于设置注解的可见性。它出现在注解声明的前面。@Retention注解有个字段,被设置为预定义的RetentionPolicy枚举常量。RetentionPolicy有3个枚举常量:SOURCE,CLASS,RUNTIME

SOURCE:表示对编译器可见,单是对.class文件和运行时不可见。

CLASS:注解会被标记到.class文件中,但是虚拟机(VM)不需要在运行时保留注解,这时默认策略。

RUNTIME:注解不只会保留在.class文件中,还会被VM提供给运行时使用。

Documented注解

Documented注解表示了javadoc工具应该为带这种类型的注解生成文档。它有好几种标签,比如:@author,@version,@param,@return等

InHerited注解

它主要用来在继承中使用。如果父类中有注解,这个注解需要被注解为InHerited,在父类中的注解才会被子类继承。否则,子类不会继承父类中的注解

@IntRes

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: