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

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

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

@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

原文地址:https://www.cnblogs.com/highkgao/p/5406269.html