1. 程式人生 > >java高級-泛型<T>和註解封裝與使用

java高級-泛型<T>和註解封裝與使用

bat string 為什麽 cor this 模塊名 vat () parameter

一、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 查詢

java高級-泛型<T>和註解封裝與使用