自定义JAVA注解_Java 注解之 自定义注解

在了解了前面的内置注解和元注解之后,就可以定义自己需要的注解。直接上例子:

我们写一个程序:我们将实现一个售票站,站内向人群提供三种规格的票:成人票、儿童票、情侣票。上代码(无注解):

1.定义接口 Ticket:

package myAnnotation;

public interface Ticket {

public float getPrice();

}

2.定义三种类型的票,实现Ticket接口,重写getPrice()方法:

package myAnnotation;

public class AdultTicket implements Ticket{

@Override

public float getPrice() {

return 10.0f;

}

}

package myAnnotation;

public class ChildrenTicket implements Ticket{

@Override

public float getPrice() {

return 5.0f;

}

}

package myAnnotation;

public class CoupleTicket implements Ticket{

@Override

public float getPrice() {

return 18.0f;

}

}

3.定义TicketOffice类,实现购票:

package myAnnotation;

public class TicketOffice {

public Ticket init(String name){

if(name == null){

throw new IllegalArgumentException("请输入需要票的类型!");

}

if("Adult".equals(name)){

return new AdultTicket();

}

if("Children".equals(name)){

return new ChildrenTicket();

}

if("Couple".equals(name)){

return new CoupleTicket();

}

throw new IllegalArgumentException("没有 "+name+" 类型的票。");

}

public static void main(String[] args) {

TicketOffice to = new TicketOffice();

Ticket t = to.init("Couple");

System.out.println("票价为 "+t.getPrice()+"元。");

}

}

运行结果:

票价为 18.0元。

我们加上注解的代码如下:

1.定义接口 Ticket:

package myAnnotation2;

public interface Ticket {

public float getPrice();

}

2.自定义Factory注解:

package myAnnotation2;

import java.lang.annotation.Retention;

import java.lang.annotation.RetentionPolicy;

import java.lang.annotation.Target;

import java.lang.annotation.ElementType;

@Target(ElementType.TYPE)

@Retention(RetentionPolicy.RUNTIME)

public @interface Factory {

Class type(); // 工程名字

String id(); //生成什么对象

}

3.定义三种类型票,实现Ticket接口,重写getPrice()方法,添加注解:

package myAnnotation2;

import myAnnotation2.Ticket;

@Factory(id = "Adult",type = Ticket.class)

public class AdultTicket implements Ticket{

@Override

public float getPrice() {

return 10.0f;

}

}

package myAnnotation2;

import myAnnotation2.Ticket;

@Factory(id = "Children",type = Ticket.class)

public class ChildrenTicket implements Ticket{

@Override

public float getPrice() {

return 5.0f;

}

}

package myAnnotation2;

import myAnnotation2.Ticket;

@Factory(id = "Couple",type = Ticket.class)

public class CoupleTicket implements Ticket{

@Override

public float getPrice() {

return 18.0f;

}

}

4.创建TicketFactory:

package myAnnotation2;

public class TicketFactory {

public Ticket creat(String id){

if (id == null) {

throw new IllegalArgumentException("请输入需要票的类型!");

}

if ("Adult".equals(id)) {

return new AdultTicket();

}

if ("Children".equals(id)) {

return new ChildrenTicket();

}

if ("Couple".equals(id)) {

return new CoupleTicket();

}

throw new IllegalArgumentException("没有 "+id+" 类型的票。");

}

}

5.那么这时候TicketOffice代码应该是这个样子的:

package myAnnotation2;

public class TicketOffice {

private TicketFactory factory = new TicketFactory();

public Ticket init(String id){

return factory.creat(id);

}

public static void main(String[] args) {

TicketOffice to = new TicketOffice();

Ticket t = to.init("Couple");

System.out.println("票价为 "+t.getPrice()+"元。");

}

}

在TicketOffice和TicketFactory中,我们可以利用getDeclaredAnnotations()方法等来获取注解中的信息。我们也可以在注解中加入售票地址、使用时间等等一系列信息。

总结一下:创建自定义注解与编写接口很相似,除了它的接口关键字前有个@符号。注解可以跟踪代码的依赖性,实现代替配置文件的功能。能够更容易读懂别人写的代码,特别是框架相关的代码。比较常见的是Spring等框架中的基于注解配置。关于注解更多的理解和使用方法、场景,需要大家去实践,这里仅仅是一些简单的理解。

最后贴一下注解知识点导图,图示网上拿来的。联系删:

联系我:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值