zoukankan      html  css  js  c++  java
  • annotations的学习

    注解编写的过程中,需要明确两点:
    1、注解使用的位置,Target(Elementyple."选择有多种" )
    (1、)TYPE可以使用在类、接口、注解等位置
    ···· (2、)FILED字段
    (3、)METHOD方法
    (4、)PARAMETER参数
    (5、)ANNOTATION_TYPE注解
    2、注解的作用时间@Retention(RetentionPolicy."选择有多种")
    (1、)CLASS class文件
    (2、)RUNTIME运行
    (3、)SOURCE源码
    例子-------------------------------------------------------------------取自java编程思想代码学习内容
    eg:
    1、
    @Target(ElementType.FIELD)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface SQLInteger {
    String name() default "";
    Constraints constraints() default @Constraints;
    }
    2、
    @Target(ElementType.FIELD)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface SQLInteger {
    String name() default "";
    Constraints constraints() default @Constraints;
    } ///:~

    3、记录一个例子 这是怎么获取注解的例子
    for(String className : args) {
    Class<?> cl = Class.forName(className);
    DBTable dbTable = cl.getAnnotation(DBTable.class);
    if(dbTable == null) {
    System.out.println(
    "No DBTable annotations in class " + className);
    continue;
    }
    String tableName = dbTable.name();
    // If the name is empty, use the Class name:
    if(tableName.length() < 1)
    tableName = cl.getName().toUpperCase();
    List columnDefs = new ArrayList();
    for(Field field : cl.getDeclaredFields()) {
    String columnName = null;
    Annotation[] anns = field.getDeclaredAnnotations();
    if(anns.length < 1)
    continue; // Not a db table column
    if(anns[0] instanceof SQLInteger) {
    SQLInteger sInt = (SQLInteger) anns[0];
    // Use field name if name not specified
    if(sInt.name().length() < 1)
    columnName = field.getName().toUpperCase();
    else
    columnName = sInt.name();
    columnDefs.add(columnName + " INT" +
    getConstraints(sInt.constraints()));
    }
    if(anns[0] instanceof SQLString) {
    SQLString sString = (SQLString) anns[0];
    // Use field name if name not specified.
    if(sString.name().length() < 1)
    columnName = field.getName().toUpperCase();
    else
    columnName = sString.name();
    columnDefs.add(columnName + " VARCHAR(" +
    sString.value() + ")" +
    getConstraints(sString.constraints()));
    }
    StringBuilder createCommand = new StringBuilder(
    "CREATE TABLE " + tableName + "(");
    for(String columnDef : columnDefs)
    createCommand.append(" " + columnDef + ",");
    // Remove trailing comma
    String tableCreate = createCommand.substring(
    0, createCommand.length() - 1) + ");";
    System.out.println("Table Creation SQL for " +
    className + " is : " + tableCreate);
    }
    }

    代码写了几遍哈哈哈感觉深入理解了,防止以后遗忘找回容易点所以复制过来了
    cl.getDeclareMethod();是获取自身的Method方法
    cl.getMethod();是获取自身以及继承过来的Method

    最后,所有的加有Declare的都是自身,不加就是获取所有

  • 相关阅读:
    [转]怎么把一个textview的背景图片设置成圆角的?
    [转]android 自定义圆形imageview控件
    [转]Android网格视图(GridView)
    简单研究Android View绘制二 LayoutParams
    简单研究Android View绘制一 测量过程
    优雅的处理Android数据库升级的问题
    DownloadManager补漏
    [转载]一个简单的内存缓存实现--一段漂亮的代码
    Java设计模式系列3--抽象工厂模式(Abstract Factory Method)
    Java设计模式系列2--工厂方法模式(Factory Method)
  • 原文地址:https://www.cnblogs.com/hbym/p/11649467.html
Copyright © 2011-2022 走看看