欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

什么是Java泛型

這篇文章將為大家詳細(xì)講解有關(guān)什么是Java泛型,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

甘南網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),甘南網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為甘南近千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的甘南做網(wǎng)站的公司定做!

一、什么是泛型?
Java泛型設(shè)計(jì)原則:只要在編譯時(shí)期沒有出現(xiàn)警告,那么運(yùn)行時(shí)期就不會(huì)出現(xiàn)ClassCastException異常.

泛型:把類型明確的工作推遲到創(chuàng)建對(duì)象或調(diào)用方法的時(shí)候才去明確的特殊的類型

參數(shù)化類型:

ArrayList<E>中的E稱為類型參數(shù)變量

ArrayList<Integer>中的Integer稱為實(shí)際類型參數(shù)

整個(gè)稱為ArrayList<E>泛型類型

整個(gè)ArrayList<Integer>稱為參數(shù)化的類型ParameterizedType

二、為什么需要泛型

有了泛型以后:

  • 代碼更加簡(jiǎn)潔【不用強(qiáng)制轉(zhuǎn)換】

  • 程序更加健壯【只要編譯時(shí)期沒有警告,那么運(yùn)行時(shí)期就不會(huì)出現(xiàn)ClassCastException異常】

  • 可讀性和穩(wěn)定性【在編寫集合的時(shí)候,就限定了類型】

在創(chuàng)建集合的時(shí)候,我們明確了集合的類型了,所以我們可以使用增強(qiáng)for來(lái)遍歷集合!

//創(chuàng)建集合對(duì)象
ArrayList<String> list = new ArrayList<>();
list.add("hello");
list.add("world");
list.add("java");

//遍歷,由于明確了類型.我們可以增強(qiáng)for
for (String s : list) {
    System.out.println(s);
}

三、泛型基礎(chǔ)
泛型類就是把泛型定義在類上,用戶使用該類的時(shí)候,才把類型明確下來(lái)….這樣的話,用戶明確了什么類型,該類就代表著什么類型…用戶在使用的時(shí)候就不用擔(dān)心強(qiáng)轉(zhuǎn)的問題,運(yùn)行時(shí)轉(zhuǎn)換異常的問題了。

在類上定義的泛型,在類的方法中也可以使用!

/*
    1:把泛型定義在類上
    2:類型變量定義在類上,方法中也可以使用
 */
    public class ObjectTool<T> {
        private T obj;
    
        public T getObj() {
            return obj;
        }
    
        public void setObj(T obj) {
            this.obj = obj;
        }
    }

用戶想要使用哪種類型,就在創(chuàng)建的時(shí)候指定類型。使用的時(shí)候,該類就會(huì)自動(dòng)轉(zhuǎn)換成用戶想要使用的類型了。

public static void main(String[] args) {

//創(chuàng)建對(duì)象并指定元素類型
ObjectTool<String> tool = new ObjectTool<>();

tool.setObj(new String("鐘福成"));
String s = tool.getObj();
System.out.println(s);


//創(chuàng)建對(duì)象并指定元素類型
ObjectTool<Integer> objectTool = new ObjectTool<>();
/**
 * 如果我在這個(gè)對(duì)象里傳入的是String類型的,它在編譯時(shí)期就通過不了了.
 */
objectTool.setObj(10);
int i = objectTool.getObj();
System.out.println(i);

}

定義泛型方法….泛型是先定義后使用的

//定義泛型方法..
public <T> void show(T t) {
    System.out.println(t);
}

用戶傳遞進(jìn)來(lái)的是什么類型,返回值就是什么類型了

public static void main(String[] args) {
    //創(chuàng)建對(duì)象
    ObjectTool tool = new ObjectTool();

    //調(diào)用方法,傳入的參數(shù)是什么類型,返回值就是什么類型
    tool.show("hello");
    tool.show(12);
    tool.show(12.5);

}

子類明確泛型類的類型參數(shù)變量

/*
    把泛型定義在接口上
 */
public interface Inter<T> {
    public abstract void show(T t);
}

實(shí)現(xiàn)泛型接口的類…..

/**
 * 子類明確泛型類的類型參數(shù)變量:
 */

public class InterImpl implements Inter<String> {
    @Override
    public void show(String s) {
        System.out.println(s);
    }
}

四、泛型的應(yīng)用
當(dāng)我們寫網(wǎng)頁(yè)的時(shí)候,常常會(huì)有多個(gè)DAO,我們要寫每次都要寫好幾個(gè)DAO,這樣會(huì)有點(diǎn)麻煩。

public abstract class BaseDao<T> {

    //模擬hibernate....
    private Session session;
    private Class clazz;


    //哪個(gè)子類調(diào)的這個(gè)方法,得到的class就是子類處理的類型(非常重要)
    public BaseDao(){
        Class clazz = this.getClass();  //拿到的是子類
        ParameterizedType  pt = (ParameterizedType) clazz.getGenericSuperclass();  //BaseDao<Category>
        clazz = (Class) pt.getActualTypeArguments()[0];
        System.out.println(clazz);

    }


    public void add(T t){
        session.save(t);
    }

    public T find(String id){
        return (T) session.get(clazz, id);
    }

    public void update(T t){
        session.update(t);
    }

    public void delete(String id){
        T t = (T) session.get(clazz, id);
        session.delete(t);
    }

}

繼承抽象DAO,該實(shí)現(xiàn)類就有對(duì)應(yīng)的增刪改查的方法了。

public class CategoryDao extends BaseDao<Category> {

}
BookDao

public class BookDao extends BaseDao<Book> {

}

關(guān)于什么是Java泛型就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

分享標(biāo)題:什么是Java泛型
瀏覽地址:http://chinadenli.net/article36/gehdsg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)公司App開發(fā)網(wǎng)站建設(shè)商城網(wǎng)站靜態(tài)網(wǎng)站建站公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)