- 相關(guān)推薦
Java泛型是什么
導(dǎo)語(yǔ):泛型,即“參數(shù)化類(lèi)型”。一提到參數(shù),最熟悉的就是定義方法時(shí)有形參,然后調(diào)用此方法時(shí)傳遞實(shí)參。那么參數(shù)化類(lèi)型怎么理解呢?讓我們了解一下吧!
顧名思義,就是將類(lèi)型由原來(lái)的具體的類(lèi)型參數(shù)化,類(lèi)似于方法中的變量參數(shù),此時(shí)類(lèi)型也定義成參數(shù)形式(可以稱(chēng)之為類(lèi)型形參),然后在使用/調(diào)用時(shí)傳入具體的類(lèi)型(類(lèi)型實(shí)參)。
看著好像有點(diǎn)復(fù)雜,首先我們看下上面那個(gè)例子采用泛型的寫(xiě)法。
1 public class GenericTest {
2
3 public static void main(String[] args) {
4 /*
5 List list = new ArrayList();
6 list.add("qqyumidi");
7 list.add("corn");
8 list.add(100);
9 */
10
11 List
12 list.add("qqyumidi");
13 list.add("corn");
14 //list.add(100); // 1 提示編譯錯(cuò)誤
15
16 for (int i = 0; i < list.size(); i++) {
17 String name = list.get(i); // 2
18 System.out.println("name:" + name);
19 }
20 }
21 }
采用泛型寫(xiě)法后,在//1處想加入一個(gè)Integer類(lèi)型的對(duì)象時(shí)會(huì)出現(xiàn)編譯錯(cuò)誤,通過(guò)List
結(jié)合上面的泛型定義,我們知道在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
20
21 boolean addAll(Collection c); c); c); 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作為L(zhǎng)ist接口的實(shí)現(xiàn)類(lèi),其定義形式是:
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 ArrayList.this.elementData(offset + index);
14 }
15
16 //...省略掉其他具體的定義過(guò)程
17
18 }
由此,我們從源代碼角度明白了為什么//1處加入Integer類(lèi)型對(duì)象編譯錯(cuò)誤,且//2處get()到的類(lèi)型直接就是String類(lèi)型了。
【Java泛型是什么】相關(guān)文章:
講解Java的泛型07-13
java泛型方法10-22
java泛型方法推薦05-25
初步理解Java的泛型特性分享10-09
java布爾型介紹10-16
Java是什么07-03
java繼承是什么06-11
Java接口是什么07-21
java工廠的方法是什么10-31