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