自定义注解

前面的注解简介中介绍了怎么定义注解,这里我们就自定义一个注解,让大家看看注解是怎么实现的。

首先定义两个注解,一个是王者,这是是青铜,嘿嘿。

//青铜注解
@Documented //加载到doc文档
@Retention(RetentionPolicy.RUNTIME)//生命周期是运行时
@Target(ElementType.TYPE) //作用域是类
public @interface Bronze {
}
//王者注解
@Documented //加载到doc文档 
@Retention(RetentionPolicy.RUNTIME)  //生命周期是运行时
@Target(ElementType.TYPE)  //作用域是类
public @interface King {
}

 我们建立一接口,叫做Player(玩家),然后有个抽象类(abstractPlayer)去实现这个接口

public interface Player {
    String  getName();
}
public abstract class AbstractPlayer implements Player {
    String name;
}

 下来用两个具体的类继承抽象类,将抽象方法重写,并将自定义注解加到类头。

@Bronze
public class XiaoHong extends AbstractPlayer {

    public String getName() {
        return name;
    }

    private String name ="晓鸿";
}
@King
public class YunZhao extends AbstractPlayer{

    public String getName() {
        return name;
    }

    private String name = "我";
}

 但这里就给两个玩家贴上了标签,就是加了注解,一个是王者,一个是青铜。

但是对标签的处理是另外实现的,这时候有个某人出现了,你看到了两个玩家,通过查看注解,知道了谁是王者,谁是青铜。

public class SomeBody {
    public void isKing(AbstractPlayer abstractPlayer) {
        Annotation[] annotations = abstractPlayer.getClass().getAnnotations();
        for (int i = 0; i <annotations.length ; i++) {
            if (annotations[i].toString().contains("King")) {
                System.out.println(abstractPlayer.getName() + "是个王者,太厉害了,啊哈哈!");
            }
            if (annotations[i].toString().contains("Bronze")) {
                System.out.println(abstractPlayer.getName() + "是个青铜,快点上白银!");
            }
        }
    }
}

 这时候我就可以在主函数下调用isKing方法,看看谁是青铜,谁是王者,哈哈。

public class Test {

    public static void main(String[] args) {
       SomeBody someBody = new SomeBody();
       someBody.isKing(new XiaoHong());
       someBody.isKing(new YunZhao());
    }
}

点击运行测试类,最后的运行结果如下:

还是挺有意思的,哈哈,大家好好学习一下哈。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值