學(xué)習(xí)中使用泛型的一些體會(huì)

ps: 這里我不會(huì)詳細(xì)去記錄泛型的使用,只是我在學(xué)習(xí)中碰到的泛型使用的點(diǎn)

1. 泛型可以作為另一個(gè)泛型的參數(shù)注入

我有一個(gè)類: BasePersenter ,聲明需要傳入一個(gè)泛型參數(shù)

public abstract class BasePersenter<V extends IBaseView> {
  ...........
}

然后我們有另一個(gè)類: BaseActivity 款熬,需要使用 BasePersenter 這個(gè)類,來做為某個(gè)泛型的限定范圍

public abstract class BaseActivity<V extends IBaseView, P extends BasePersenter<V>> extends AppCompatActivity implements IBaseView {
  ...........
}

然后我們就可以看到首先聲明的 泛型 V 攘乒,作為參數(shù)傳入了 后面聲明的泛型 P : P extends BasePersenter<V>


2. 聲明的泛型參數(shù)可以暫時(shí)不設(shè)置這個(gè)泛型需要使用的泛型贤牛,而是有具體的繼承類來指定

先聲明一個(gè)類,需要傳入一個(gè)泛型類型

public abstract class BasePresenter<V> 

在使用上面這個(gè)泛型時(shí)可以先指定泛型類型

public abstract class BaseActivity<P extends BasePresenter, B extends ViewDataBinding> extends DataBindingActivity<B>

由具體的繼承類來指定泛型類型

abstract class Presenter extends BasePresenter<AdviseContract.View> 

最終 activity 的實(shí)現(xiàn)類的泛型使用

public class AdviseActivity extends BaseActivity<AdvisePresenter, ActivityFeedbackBinding> 

3. 泛型可以通過繼承的方式则酝,一步步的縮小泛型的限定范圍

我們有一個(gè)頂層接口 : IBaseTest

public interface IBaseTest<D extends Object,A extends Object> {
  ...........
}

然后有一個(gè)類:BaseTest 殉簸,實(shí)現(xiàn)了這個(gè)接口,對(duì)其中的泛型做了限定

public class BaseTest<D extends String, A extends String> implements IBaseTest<D, A> {
  ...........
}

4. 注意泛型的寫法沽讹,是繼續(xù)向下傳遞還是在這里聲明具體類型

  • 向下傳遞的寫法般卑,接著上面的 例子:
public class BaseTest<D extends String, A extends String> implements IBaseTest<D, A> {
  ...........
}
  • 不向下傳遞了,直接指定具體類型了
public class BaseTest implements IBaseTest<String爽雄,String> {
  ...........
}
  • 寫在類名下的泛型是屬性聲明的蝠检,是需要子類來指定類型的
  • 寫在該類繼承的基類類名或是實(shí)現(xiàn)的接口接口名下的都是屬于指定具體的泛型類型了,注意這種寫法挚瘟,我們?cè)賹懸粋€(gè)子類繼承該類叹谁,那么這個(gè)子類就無法再指定父類的泛型類型了,因?yàn)樯冻烁牵驗(yàn)楦割惗紱]聲明泛型焰檩,你怎么去指定

5. 注意單獨(dú)的泛型方法寫法的不同

/**
     * 泛型方法
     * Created by zhongtian465 on 2017-10-12.
     */
    public class GenericMethod {
        /**
         * 泛型方法
         * @param clazz 用來創(chuàng)建泛型對(duì)象 、Class<T>:指明泛型T的具體類型
         * @param <T> 聲明此方法為泛型方法侧漓,且有個(gè)類型T
         * @return T 返回類型是T
         * @throws IllegalAccessException
         * @throws InstantiationException
         */
        public <T> T getObject(Class<T> clazz) throws IllegalAccessException, InstantiationException {
            T object= clazz.newInstance();
            return object;
        }

        public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
            GenericMethod genericMethod = new GenericMethod();
            User user = (User) genericMethod.getObject(Class.forName("com.zt.study.java.generic.User"));
            System.out.println(user);
        }
    }

泛型方法在返回值前面加上一個(gè) " <T> " 來表示這是一個(gè)泛型方法锅尘,這里這個(gè)泛型 T 和類聲明的泛型不是一回事,不沖突布蔗,各用各的


優(yōu)秀資料:

絕對(duì)是代碼封裝藤违,泛型使用的經(jīng)典案例,寫的太好了纵揍,非常深度顿乒,我現(xiàn)在寫的還差的遠(yuǎn)呢

泛型學(xué)習(xí)的基礎(chǔ)文章:

  • Java泛型(一)
    • java'是偽泛型,我們?cè)诖a寫的是泛型泽谨,但是在編譯時(shí)會(huì)擦除所有的泛型標(biāo)記璧榄,用具體類型來替換泛型類型特漩,這是在編譯器在編譯時(shí)干的事
    • 泛型不能用在竟然唉的方法和參數(shù)中,因?yàn)殪o態(tài)是屬于類型加載器的骨杂,不是數(shù)據(jù)一個(gè)具體類型對(duì)象的涂身,我們不在一個(gè)具體的對(duì)象中聲明具體的類型,泛型怎么知道要轉(zhuǎn)換成什么類型呢搓蚪。除非你把這個(gè)靜態(tài)方法聲明為靜態(tài)泛型方法
  • Java泛型(二)
    • 具體師范了泛型 - 類蛤售,方法,泛型方法妒潭,對(duì)泛型的使用
    • 明確了泛型的通配符的使用 List<? extends Number> / List<? super Integer>
    • 明確了泛型逆變與協(xié)變應(yīng)該怎么寫悴能,這個(gè)很重要的,用的 list 做的例子
  • 16.泛型介紹及泛型類雳灾、泛型方法漠酿、泛型接口
    • 沒說理論,用簡單的代碼說明泛型使用的谎亩。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末炒嘲,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子团驱,更是在濱河造成了極大的恐慌摸吠,老刑警劉巖空凸,帶你破解...
    沈念sama閱讀 223,002評(píng)論 6 519
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嚎花,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡呀洲,警方通過查閱死者的電腦和手機(jī)紊选,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,357評(píng)論 3 400
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來道逗,“玉大人兵罢,你說我怎么就攤上這事∽仪希” “怎么了卖词?”我有些...
    開封第一講書人閱讀 169,787評(píng)論 0 365
  • 文/不壞的土叔 我叫張陵,是天一觀的道長吏夯。 經(jīng)常有香客問我此蜈,道長,這世上最難降的妖魔是什么噪生? 我笑而不...
    開封第一講書人閱讀 60,237評(píng)論 1 300
  • 正文 為了忘掉前任裆赵,我火速辦了婚禮,結(jié)果婚禮上跺嗽,老公的妹妹穿的比我還像新娘战授。我一直安慰自己页藻,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,237評(píng)論 6 398
  • 文/花漫 我一把揭開白布植兰。 她就那樣靜靜地躺著份帐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪楣导。 梳的紋絲不亂的頭發(fā)上弥鹦,一...
    開封第一講書人閱讀 52,821評(píng)論 1 314
  • 那天,我揣著相機(jī)與錄音爷辙,去河邊找鬼彬坏。 笑死,一個(gè)胖子當(dāng)著我的面吹牛膝晾,可吹牛的內(nèi)容都是我干的栓始。 我是一名探鬼主播,決...
    沈念sama閱讀 41,236評(píng)論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼血当,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼幻赚!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起臊旭,我...
    開封第一講書人閱讀 40,196評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤落恼,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后离熏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體佳谦,經(jīng)...
    沈念sama閱讀 46,716評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,794評(píng)論 3 343
  • 正文 我和宋清朗相戀三年滋戳,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了钻蔑。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,928評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡奸鸯,死狀恐怖咪笑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情娄涩,我是刑警寧澤窗怒,帶...
    沈念sama閱讀 36,583評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站蓄拣,受9級(jí)特大地震影響扬虚,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜弯蚜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,264評(píng)論 3 336
  • 文/蒙蒙 一孔轴、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧碎捺,春花似錦路鹰、人聲如沸贷洲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,755評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽优构。三九已至,卻和暖如春雁竞,著一層夾襖步出監(jiān)牢的瞬間钦椭,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,869評(píng)論 1 274
  • 我被黑心中介騙來泰國打工碑诉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留彪腔,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,378評(píng)論 3 379
  • 正文 我出身青樓进栽,卻偏偏與公主長得像德挣,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子快毛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,937評(píng)論 2 361