zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Stm32CubeMX5 配置 STM32的串口DMA接受方式 --- 基于 stm32f051k8u6
    Stm32 控制1.44寸液晶显示图片 基于stm32f051k8u6
    makefile自动编译
    Stm32CubeMX5 创建LED控制工程
    ARM 汇编与C之间 的调用
    shell 脚本文件类型.sh ,变量
    bzoj3589 动态树 求链并 容斥
    bzoj2287【POJ Challenge】消失之物 缺一01背包
    bzoj2916: [Poi1997]Monochromatic Triangles 思路
    [NOI2010]超级钢琴 主席树
  • 原文地址:https://www.cnblogs.com/highkgao/p/5406269.html
Copyright © 2011-2022 走看看