频道栏目
首页 > 资讯 > 其他 > 正文

枚举和注解的实现

17-12-08        来源:[db:作者]  
收藏   我要投稿

枚举

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

相关TAG标签
上一篇:PHP数组之预定义超全局数组变量讲解
下一篇:LintCode之40 用栈实现队列“编程题”
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站