<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                在前面的學習中,使用了大量的這樣的語句,比如:`List<Teacher>`,`Array<Teacher>`,`HTMLCollectionOf<HTMLOptionElement>`,如果你學習過JAVA對此應該并不陌生,這種`<>`的用法被稱之為泛型。泛型譯之于英文的`generic`,意為一般的、通用的、廣泛的。大體就是說這個東西隨我們的意愿,我們想讓它是什么,它就是是什么。 在實際的使用中,泛型常常被用于一些像`容器`的一樣的類型中。比如我們使用的最廣泛的`List<T>`,`Array<T>`,無論是列表還是數組都是一個容器,該容器能夠裝入任何類型的數據,所以用泛型來`<T>`來對該容器進行標識。 這就像現實生活中3只相同玻璃杯:第一只玻璃杯第一次被倒入了水,從此它有了個新名字叫水杯;第二只玻璃杯第一次被倒入了酒,從此它有了個新名字叫酒杯;第三只玻璃杯第一次被倒入了花生油,從此它有了一個新名字叫油壺。由此看來玻璃杯是多用途的,在程序中把這種擁有各種裝載給力的窗口稱為泛型容器;用代碼來表示上述三只玻璃杯:`水杯 = 玻璃杯<水>`,`酒杯 = 玻璃杯<酒>`, `油壺 = 玻璃杯<油>`。 在計算機的世界中,這個玻璃杯大概長這個樣子: ```java class 玻璃杯<T?> { T 存放的物質; ? void 裝入<裝入的物質: T?> { this.存放的物質 = 裝入的物質; } T? 取出() { return this.存放的物質; } } ``` * ? 【規定】該玻璃杯裝啥都行;你規定裝啥,咱就裝啥。 * ? 【實際的存放地】你規定裝啥,我就能存啥。 * ? 【存數據】你說裝啥,那裝的時候就必須是啥。 * ? 【取數據】你說裝啥,那么取的時候就必然是啥。 當我們想用其裝水時,我們需要用如下代碼: ``` 玻璃杯<水> a = new 玻璃杯<水>(); ``` 此時,我們便得到了一個規定好的用于裝水且只能裝水的玻璃杯a。 ``` a.裝入(水); ``` 規定了a裝的是水,那么a就能裝水,具只能裝水。a裝的水被存在了內部的?中。 ``` 水 b = a.取出(); ``` 規定a裝的是水,那么從a中取出來的也必然是水。 ## 多泛型 現實生活中除了家里的玻璃杯是多用途的以外,火鍋店的`鍋`也是典型的多用途容器。我們到了火鍋店,你點清湯鍋底那么倒入該`鍋`里便是清湯,我們從中盛出的當然也會是清湯;你點麻辣鍋底,該`鍋`中便會是麻辣味道的湯。除此以外,還有一種`鍋`叫做鴛鴦鍋的,通過泛型來描述它的代碼如下: ``` class 鴛鴦鍋<T?, D?> { T 左側鍋裝的湯; D 右側鍋裝的湯; void 裝入<裝入左側鍋的湯: T, 裝入右側鍋的湯 D> { ? this.左側鍋裝的湯 = 裝入左側鍋的湯; this.右側鍋裝的湯 = 裝入右側鍋的湯; } void 裝入<裝入左側鍋的湯: T> { ? this.左側鍋裝的湯 = 裝入左側鍋的湯; } void 裝入<裝入右側鍋的湯 D> { ? this.右側鍋裝的湯 = 裝入右側鍋的湯; } T 取出左側鍋裝的湯() { ? return this.左側鍋裝的湯; } D 取出右側鍋裝的湯() { ? return this.右側鍋裝的湯; } } ``` * ?? 分別對內部的兩個容器中的類型做約束 * ? 可以使用一個方法一起裝入 * ? 也可以按類型分子容器裝入 * ? 每個子容器裝的是時候,獲取的時候便也會是什么。 ## 總結 好了,到了總結的時候了。根據上面的一此代碼我們猜測: * [ ] 當某個類具有`容器`性質的時候,可以使用泛型來聲明。 * [ ] 在使用`容器`時,一旦設置`容器`中物質的具體類型。則該容器的后續操作,便被約束于該具體類型。 * [ ] 在具體裝載數據以前它是寬泛的,而一旦聲明裝載數據的類型,便馬上變得特定了 * [ ] `容器`中還可以有`子容器`,當容器可以裝載多種物質時,需要對各種物質的類型分別進行約束。 筆者認為:泛型是對容器裝載數據的一種約束,它即寬泛又特定。它的寬泛在于可以裝載任何的類型,它的特定在于一旦指定了裝置某種類型后后續的操作便只能針對此類型。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看