• java高级-泛型<T>和注解封装与使用


     一、java泛型

    其实就是约束我们的集合和接口和类

    为什么要泛型:规范我数据的操作和类型,它常用语一些接口和父子关系中(继承)

    泛型能很好体现java的继承,封装这两个特点

      用途:泛型、反射---->做项目,搭框架-》模仿和揣测

     ssh ssi 散列的数据结构 Vector<E>

    //comparator comparable   排序
    //Integer Long Float Double Character Boolean Byte
    ArrayList<类> list = new ArrayList<类>();
    list.add("x");
            
    //Spring -->面向接口编程-->以接口为导向-->延伸出很多规范和子类---比如:数据库业务的增删改查
    //注解、反射、设计模式(编程思想)、线程池(jvm)
    //方法注解、类注解、属性注解===低耦合==就是为了拿到类本身        
    //日志统计:我要统计出你的请求是来自哪个类,哪个方法,并且执行了多长时间,以及他们的模块名称是什么。
    //id name class_name user_name create_name description model update_time user_id

    二、注解封装与使用

    注解+Aop

    注解+Filter

    ①封装

    package com.steven.demo;
    
    import java.lang.annotation.Documented;
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    
    /*
    黑认情况下一个自定义的 Annotation可以在任意地方使用,如自定义的 MyAnnotatlon,如果没有指定 Target,则可以在任意地方使用
    1、只能在 Annotation中出现: ANNOTATION_TYPE
    2、只能在构造方法中出现: CONSTRUCTOR
    3、在属性中出现: FIELD
    4、只能在本地变量中出现: LOCAL_VARIIABLE
    5、在方法上出现: METHOD
    6、在包声明中出现: PACKAGE
    7、在参数声明中出现: PARAMETER
    8、类、接口(包括注释类型)或枚举声明中使用:TYPE
    
    @Documented
    在java.1ang, annotation中定义的注解类型 Documented,
    指示某一类型的注释将通过 javadoc和类似的默认工具进行文档化。应使用此类型来注释这些英型的声明
    其注释会影响由其客户端注释的元素的使用。如果类型声明是用 Documented来注释的,则其注释将成为注释元素的公共API的一部分。
    
    @Inherited
    在java.1ang.annotation中声明 Inherited,表示该 annotation是否被该子类断承下去,如果没有此注解,说明不能被断承
    如自定义的 MyAnnotatlon,加入@Inherited,说明此 Annotation可以被子类断承
    参考文档:http://chenzehe.iteye.com/blog/14882844 
    */
    @Documented
    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.TYPE)
    public @interface HKAnnotationClass {
        public String name() default "";
        public String model() default "";
    }

    ②使用

    import java.util.Set;
    
    @HKAnnotationClass(model = "Login",name = "用户登录管理") //注解使用
    public class Test {//实现代码}

    三、泛型的简单使用-案例

    package com.steven.demo;
    
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.HashSet;
    import java.util.Set;
    
    @HKAnnotationClass(model = "Login",name = "用户登录管理") //注解使用
    public class Test {
    
        //?未知--List<String>
        //一句话:?接收子类的任意数据类型
        //如果是单个问号的话:那么就告诉你一定是他子类?根据子类里面的泛型去决定的
        public static void displayName(Collection<?> collection) {
            if (collection==null) {
                return; 
            }
            for (Object object : collection) {
                System.out.println(object );
            }
        }
        //缩小范围,限制在子类 
        /*
         public static void displayName(Collection<? extends Animal> collection) {
            if (collection==null) {
                return; 
            }
            for (Animal animal : collection) {
                System.out.println(animal.toString() );
            }
        }
         */
        public static Animal getCat(Animal[] animals,String name) {
            Animal animal2  = null;
            if (animals!=null) {
                 for (Animal animal : animals) {
                     if (animal.name.equals(name)) {
                        animal2 = animal;  
                        break;
                    }
                 }
            }
            return animal2;
            
        }
        public static void main(String[] args) {
    
            ArrayList<String> strings = new ArrayList<String>();//指定数组里的元素
            strings.add("1111");
            strings.add("2222");
            displayName(strings);
            //1111
            //2222
            System.out.println("======================");
            ArrayList<Integer> integers = new ArrayList<Integer>();
            integers.add(1111);
            integers.add(2222);
            displayName(integers);
            System.out.println("======================");
            ArrayList<Float> floats = new ArrayList<Float>();
            //List Set 的顶级类 Collection
            Set<String> sets = new HashSet<String>();
            sets.add("1111");
            sets.add("2222");
            displayName(sets);//封装、继承、多态
            
            //======================================
            Animal cat = new Cat("小猫", "喵喵喵");
             System.out.println(cat.toString());
             Animal pig = new Cat("小猪", "呼呼呼");
             System.out.println(pig.toString());
             //动物的名字是小猫他能:喵喵喵
             //动物的名字是小猪他能:呼呼呼
             ArrayList<Cat> cats = new ArrayList<Cat>();
             cats.add((Cat) cat);
             cats.add((Cat) pig); 
             for (Cat cat2: cats) {
                 System.out.println("=="+cat2);
             }
             displayName(cats);
             
             Animal[] animals = {new Cat("小猫1", "喵喵喵"),new Cat("小猫2", "喵喵喵"),new Cat("小猫3", "喵喵喵")};
            Animal animal =   getCat(animals, "小猫3"); 
            System.out.println(animal.toString());
        }    
            
    }

    Animal类

    package com.steven.demo;
    
    public class Animal {
        
       public String name;
       
       public Animal() {
           
       }
       
       public Animal(String name)  {
            this.name = name;
       }
       
       public String toString() {
        return "动物的名字是"+name;
       }
    }

    Cat类

    package com.steven.demo;
    
    public class Cat extends Animal {
    
        private String sound;
        public Cat(String name, String sound) {
            super(name);
            this.sound = sound;
        }
        public String  toString() {
            return super.toString() + "他能:"+sound;
        }
    }

    四、java T 的使用

    //泛型T 表示通用  <T extends Animal>

    //我们的泛型是用来实现父子关系的一个范围的固定

    /*
          public <T> List<T> arrayToList {
            return null
          }
         */
        public static <T extends Animal> T getAnimal(T[] animals,String name) {
            T animal2  = null;
            if (animals!=null) {
                 for (T animal : animals) {
                     if (animal.name.equals(name)) {
                        animal2 = animal;  
                        break;
                    }
                 }
            }
            return animal2;
            
        }
    
    //springmvc
    //+hibenate           增删改
    //+jdbcteamkplte/myibats 查询
  • 相关阅读:
    PCLVisualizer可视化类(4)
    PCLVisualizer可视化类(3)
    PCLVisualizer可视化类(2)
    PCLVisualizer可视化类(1)
    怎样可视化深度图像
    如何从深度图像中提取边界
    如何从点云创建深度图像
    Codeforces Round #235 (Div. 2) C. Team
    next_permutation函数
    安慰奶牛 蓝桥杯
  • 原文地址:https://www.cnblogs.com/StevenHuSir/p/Java_T.html
Copyright © 2020-2023  润新知