這個Java泛型不太正經(jīng)
一、前言
泛型在java中有很重要的地位,在實際開發(fā)中用處也很大。
二、泛型
泛型:是jdk5中引入的特性,他提供編譯是類型是類型的安全檢測機制,這個機制允許在編譯時檢測到非法的類型,它的本質(zhì)是參數(shù)化類型,也就是所操作的數(shù)據(jù)類型不變指定為一個參數(shù)
將原來具體的類型參數(shù)化,然后再使用/調(diào)用的時候傳入具體的參數(shù)
泛型的類型:
①:泛型類
②:泛型方法
③:泛型接口
三、泛型定義的格式:
<類型> :指定一種類型的格式,這里的類型可以看成是形參。
<類型1,類型2...>:指定多種類型的格式,多種類型之間用逗號隔開,這里的類型類型1,類型2可以看成是形參,將來具體調(diào)用的時候的參數(shù)看成是實參,這里的泛型只能是引用類型。
什么是引用類型?
除了八大基本類型其他的都是引用類型,如基本類型對應的包裝類
- boolean -->Boolean
- char --->Character
- byte -->Byte
- short -->Short
- int -->Integer
- long -->Long
- float -->Float
- double -->Double
泛型的好處是:
- 把運行得問題提前到編譯時期
- 避免了強制轉換
沒指定類型默認是Object類型
舉個例子,當沒有使用泛型時:
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class 泛型Demo {
public static void main(String[] args) {
//創(chuàng)建一個對象
Map map=new HashMap();
//添加數(shù)據(jù)
map.put(1, "張三");
map.put(2, "李四");
map.put(3,"王五");
map.put(5, 6);//加了不一樣的類型數(shù)據(jù)
//鍵的集合
Set keySet=map.keySet();
//鍵找值
for(Object key: keySet){
String value=(String)map.get(key);
System.out.println(key+":"+value);
}
}
}報了一個類型轉換異常(int會自動轉化成Integer),Integer不能轉為String
Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String

此時泛型的好處就體現(xiàn)出來了,將運行時會出現(xiàn)的錯誤拉到了編譯期間。


當然也可以在輸出是采用Object接收
//鍵的集合
Set keySet=map.keySet();
//鍵找值
for(Object key: keySet){
Object value=map.get(key);
// String value=(String)map.get(key);
System.out.println(key+":"+value);
}這樣也可以得到想要的結果。

四、泛型類
泛型類的定義格式:
修飾符 class 類名<類型> { }
舉例:
public class Generic<T>{}這里的T可以使任意標識,常見的如T、E、K、V等形式常用于表示泛型。
泛型類下
public class Generic<T> {
//定義一個變量,提供get set方法
private T t;
public T getT(){
return t;
}
public void SetT(T t){
this.t=t;
}
}測試類下
public class GenericDemo {
public static void main(String[] args) {
Generic<String> g1=new Generic<>();
g1.SetT("章三");
System.out.println(g1.getT());
System.out.println("------------------");
Generic<Integer> g2=new Generic<>();
g2.SetT(100);
System.out.println(g2.getT());
}
}運行結果

定義這個泛型類的好處就是可以在測試中輸入各種你想要的類型。
五、泛型方法
定義泛型方法的格式:
修飾符 <類型> 返回值類型 方法名 (類型 類型名)
舉例:
public <T> void show (T t){}泛型方法
public class Generic {
public <T> void show(T t){
System.out.println(t);
}
}泛型方法測試下:
public class GenericDemo {
public static void main(String[] args) {
Generic g=new Generic();
g.show("張三");
g.show(100);
g.show(true);
g.show(null);
}
}運行結果

泛型方法比泛型類方便許多,直接在這使用即可,可以用個中類型的參數(shù)
六、泛型接口
格式:修飾符 interface 接口名<類型>{}
舉例:
public interface Generic<T>{}既然是接口那就得定義一個類 去實現(xiàn)這個接口
泛型接口:
public interface Generic<T>{}GenricImp類下:
public class GenricImp<T> Generic<T>{
public void show(T t){
System.out.println(t);
}
}GenricDemo類下:
public class GenricDemo{
public static void main(String[]args){
Generic<String> g1=new GenericImp<String>();
g1.show("張三");
Generic<Integer> g2=new GenericImp<Integer>();
g2.show(100);
}
}七、類型通配符
<? extends T>上限通配,?表示是T的一個未知子類。
<? super T>下限通配,?表示是T的一個未知父類。
總結
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注腳本之家的更多內(nèi)容!
相關文章
IDEA配置maven環(huán)境的詳細教程(Unable to import maven project報錯問題的解決)
這篇文章主要介紹了IDEA配置maven環(huán)境的詳細教程(Unable to import maven project問題的解決),本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-06-06
Java源碼分析:Guava之不可變集合ImmutableMap的源碼分析
今天給大家?guī)淼氖顷P于Java源碼的相關知識,文章圍繞著Java ImmutableMap展開,文中有非常詳細的介紹及代碼示例,需要的朋友可以參考下,希望能給你帶來幫助2021-06-06
Java實現(xiàn)獲取前、后N天日期的函數(shù)分享
本文給大家分享的是使用java實現(xiàn)的獲取當前日期前后N天的函數(shù),非常的簡單實用,有需要的小伙伴可以參考下。2015-03-03
idea將maven項目改成Spring boot項目的方法步驟
這篇文章主要介紹了idea將maven項目改成Spring boot項目的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-09-09
SpringMVC @GetMapping注解路徑?jīng)_突問題解決
MD5對密碼進行加密存儲是常見的一種加密方式,本文主要介紹了Java雙重MD5加密實現(xiàn)安全登錄,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-07-07

