什麼是泛型
代碼模闆
定義和使用含有泛型的類
在沒有用泛型之前
如果要獲得某個變量類型是什麼 比如String Int 等等
需要單獨寫一個類來進行
public class GenericTest{
public String name;
public GenerciTest(T name) {
this.name = name;
}
public static void main(String[] args){
System.println.out("name的類型是:"+name.getClass().getName())
}
}
後面判斷int float 等等 或者 自定義的類 那寫不完的類判斷
是以
泛型
應運而生
泛型類
public class GenerciTest<T> {
private T t;
public T getT() {
return t;
}
public void setName(T t) {
this.t = t;
}
public GenerciTest(T t) {
this.t = t;
}
public void say() {
System.out.println("t的類型是:" + t.getClass().getName());
}
}
建立的時候确定 T 是什麼類型
個人了解
T
是
類型變量
好比如 定義一個 變量 public String name = "111";
name
是儲存
111字元串
的變量
而
T
可以了解為 儲存
資料類型
的一個變量 String Integer Char 還有
自定義類
等等
泛型
省去了
大量重複的代碼
定義和使用含有泛型的方法
package com.generci.day01.sec01;
/**
* 定義和使用含有泛型的方法
*/
public class Demo02 {
public static <T> void print(T t){
System.out.println(t.getClass().getName());
}
public static void main(String[] args) {
print("");
print(66);
print(66.33);
print('A');
print(true);
}
}
調用方法的時候确定泛型的類型
輸出

定義和使用含有泛型的接口
GenericInterface
接口
package com.generci.day01.sec02;
/**
* 接口上定義泛型
*
* 使用接口的時候确定泛型的類型
* @param <T>
*/
public interface GenericInterface<T> {
/**
* 添加
* @param t
*/
void add(T t);
/**
* ‘更新
* @param index
* @return
*/
T get(Integer index);
}
Demo01
package com.generci.day01.sec02;
/**
* 定義和使用含有泛型的接口
*
* 确定泛型的類型
*/
public class Demo01 implements GenericInterface<String>{
@Override
public void add(String s) {
}
@Override
public String get(Integer index) {
return null;
}
}
實作
GenericInterface
接口時 确定了
T
類型 為
String
Demo02
package com.generci.day01.sec02;
/**
* 定義和使用含有泛型的接口
*
* 始終不确定泛型的類型,直到建立對象時,确定泛型的類型
*/
public class Demo02<T> implements GenericInterface<T> {
@Override
public void add(T t) {
}
@Override
public T get(Integer index) {
return null;
}
}
測試
建立對象的時候确定了
T
的具體類型是
Integer
調用add方法時 虛拟機會自動将
T
類型變成
Integer
小結
T
不能是
基本類型
泛型就是編寫
模闆
代碼來适應任意類型
定義在
類
上的泛型 使用
類
的時候會确定泛型的類型
方法
方法
接口
接口
未指明
T
類型時 編譯器預設為
Object
即使再小的帆也能遠航