注解是在我们的代码中添加信息提供了一种更加简便的方法,通过注解,我们可以在适当的时候非常方便的使用一些数据。具体的注解的概念就不展开了,具体通过一个例子来说明自定义注解的使用。
具体的场景是,我们开了一家超市,超市里面有个自动货柜机,货柜机上的产品都有产品编号、价格、产品描述和注意事项,超市管理人员需要在自动售卖机卖出东西时,实时的进行记录,通过注解再进行售卖的时候进行相关信息的记录,为了实现这个目标,我们首先申明一个注解,如下:
@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