Java泛型是什麼
導語:泛型,即“參數化類型”。一提到參數,最熟悉的就是定義方法時有形參,然後調用此方法時傳遞實參。那麼參數化類型怎麼理解呢?讓我們瞭解一下吧!
顧名思義,就是將類型由原來的具體的類型參數化,類似於方法中的變量參數,此時類型也定義成參數形式(可以稱之為類型形參),然後在使用/調用時傳入具體的類型(類型實參)。
看着好像有點複雜,首先我們看下上面那個例子採用泛型的寫法。
1 public class GenericTest {
2
3 public static void main(String[] args) {
4 /*
5 List list = new ArrayList();
6 ("qqyumidi");
7 ("corn");
8 (100);
9 */
10
11 List
12 ("qqyumidi");
13 ("corn");
14 //(100); // 1 提示編譯錯誤
15
16 for (int i = 0; i < (); i++) {
17 String name = (i); // 2
18 tln("name:" + name);
19 }
20 }
21 }
採用泛型寫法後,在//1處想加入一個Integer類型的對象時會出現編譯錯誤,通過List
結合上面的泛型定義,我們知道在List
1 public interface List
2
3 int size();
4
5 boolean isEmpty();
6
7 boolean contains(Object o);
8
9 Iterator
10
11 Object[] toArray();
12
13
14
15 boolean add(E e);
16
17 boolean remove(Object o);
18
19 boolean containsAll(Collection c);
20
21 boolean addAll(Collection c);
22
23 boolean addAll(int index, Collection c);
24
25 boolean removeAll(Collection c);
26
27 boolean retainAll(Collection c);
28
29 void clear();
30
31 boolean equals(Object o);
32
33 int hashCode();
34
35 E get(int index);
36
37 E set(int index, E element);
38
39 void add(int index, E element);
40
41 E remove(int index);
42
43 int indexOf(Object o);
44
45 int lastIndexOf(Object o);
46
47 ListIterator
48
49 ListIterator
50
51 List
52 }
我們可以看到,在List接口中採用泛型化定義之後,
自然的,ArrayList作為List接口的實現類,其定義形式是:
1 public class ArrayList
2 implements List
3
4 public boolean add(E e) {
5 ensureCapacityInternal(size + 1); // Increments modCount!!
6 elementData[size++] = e;
7 return true;
8 }
9
10 public E get(int index) {
11 rangeCheck(index);
12 checkForComodification();
13 return entData(offset + index);
14 }
15
16 //...省略掉其他具體的定義過程
17
18 }
由此,我們從源代碼角度明白了為什麼//1處加入Integer類型對象編譯錯誤,且//2處get()到的類型直接就是String類型了。
-
40個Java多線程問題總結
Java多線程是什麼Java提供的併發(同時、獨立)處理多個任務的機制。多個線程共存於同一JVM進程裏面,所以共用相同的內存空間,較之多進程,多線程之間的通信更輕量級。依我的理解,Java多線程完全就是為了提高CPU的利用率。Java的線程有4種狀態,新建(New)、運行(Runnabl...
-
Java 正則表達式
Java是一門編程語言,那麼大家知道Java正則表達式是怎樣的呢?下面一起來看看!Java正則表達式正則表達式定義了字符串的模式。正則表達式可以用來搜索、編輯或處理文本。正則表達式並不僅限於某一種語言,但是在每種語言中有細微的差別。正則表達式實例一個字符串其...
-
如何學好Java語言編程
決定好想學什麼編程語言了嗎,現在就讓我們開始學習吧。所有你需要做的就是打開一本書,然後開始閲讀,是這樣的嗎?不全是這樣的。learn-first我會給出學習第一門編程語言的理想方法佈局,你不僅應該學習這個佈局方法,還應該享受精通它——如果不能掌握的話。學習第一門...
-
計算機二級考試Java精選訓練題
下面是應屆畢業生考試網小編搜索整理的計算機二級考試Java精選訓練題,希望對大家有所幫助。[簡答題]本題中,在下畫線上填寫代碼,指定變量b為字節型,變量f為單精度實型,變量l為64位整型。publicclassjaval{publicstaticvoidmain(String[-]args){b=49;f=8.9f;l=0xfedl...