java 注解学习(一、注解入门,自定义注解)

时间:2021-10-10 02:11:47

  注解是在我们的代码中添加信息提供了一种更加简便的方法,通过注解,我们可以在适当的时候非常方便的使用一些数据。具体的注解的概念就不展开了,具体通过一个例子来说明自定义注解的使用。

  具体的场景是,我们开了一家超市,超市里面有个自动货柜机,货柜机上的产品都有产品编号、价格、产品描述和注意事项,超市管理人员需要在自动售卖机卖出东西时,实时的进行记录,通过注解再进行售卖的时候进行相关信息的记录,为了实现这个目标,我们首先申明一个注解,如下:

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Product {
public int id();
public String price();
public String name();
public String notict() default "";
}

   然后我们来设计我们的售卖机:

public class SelfService {
@Product(id
= 1, price = "1.00", name = "apple")
public void sellApple() {

}
@Product(id
= 2, price = "2.0", name = "banana", notict = "eat more easily apparent")
public void sellBanana() {

}
@Product(id
= 3, price = "5.00", name = "orange")
public void sellOrange() {

}
}

 

      目前我们的售卖机中有3种商品,分别复合我们之前定义的商品的注解类型,然后我们需要设计我们的售卖程序,在这里,我们就会用到java中的反射了,具体代码如下

    static Map<Integer, Product> productMap = null;
static {
productMap
= new HashMap<Integer, Product>();
for (Method m : SelfService.class.getDeclaredMethods()) {
Product product
= m.getAnnotation(Product.class);
if (product != null) {
productMap.put(product.id(), product);
}
}
}

public static void selfSell(int i) {
Product product
= productMap.get(i);
if (product == null) {
System.out.println(
"no such product id=" + i);
}
else {
System.out.println(
"sell product: id=" + product.id() + " name="
+ product.name() + " price=" + product.price() + " notice="
+ product.notict());
}

}

     这里有两块内容,一块是货物准备,就是static 中的代码块,通过读取自动售卖机的类方法,并确认类方法是否属于我们的注解,如果符合,则在我们的货物Map上增加货物。另一块是售卖程序,就是selfSell,通过我们的货物id,在Map中寻找对应的货物,并进行售卖。

     最后是我们的测试程序:

public static void main(String[] args) {
selfSell(
0);
selfSell(
1);
selfSell(
2);
selfSell(
3);
selfSell(
4);
}

     运行结果:

no such product id=0
sell product: id
=1 name=apple price=1.00 notice=
sell product: id
=2 name=banana price=2.0 notice=eat more easily apparent
sell product: id
=3 name=orange price=5.00 notice=
no such product id
=4

     这下我们的测试就已经好了,如果后面我们需要新增一个货物,则只需要在我们的售卖机类(SelfService)中增加新的货物就行了:

    @Product(id = 4, price = "6.00", name = "cake")
public void sellCake() {

}

     重新测试一下:

no such product id=0
sell product: id
=1 name=apple price=1.00 notice=
sell product: id
=2 name=banana price=2.0 notice=eat more easily apparent
sell product: id
=3 name=orange price=5.00 notice=
sell product: id
=4 name=cake price=6.00 notice=

     我们新的货物就完成了, 是不是很简单呢。

      代码的例子:

      http://download.csdn.net/detail/highkgao1988/9495493