Java中泛型的接口、通配符使用詳解
Java中的泛型
泛型應(yīng)用類型
泛型定義時常用方式有三種(可參考List<E>,Map<K,V)等接口定義):
- 泛型類:class 類名<泛型,…>{}
- 泛型接口:interface 接口名<泛型,…>{}
- 泛型方法: <泛型> 方法返回值類型 方法名(形參){}
1 -定義
編譯時的類型安全監(jiān)測機制,也可以把這個數(shù)據(jù)類型理解成是一種可以傳遞的參數(shù)
泛型類、泛型方法、泛型接口
2 - 泛型定義格式
<類型>:表示一種類型的格式
<類型1,類型2......> :表示是多種類型的格式,用逗號分割
class Array<T>{//類泛型:類名<泛型>
Object[] array=new Object[10];
public void add(T t){}//通過類泛型約束方法參數(shù)類型
public T get(int i){//通過類泛型約束方法返回值類型
return (T)array[i];
}
}3 - 使用泛型的好處
- 把運行期間可能出現(xiàn)的問題,拿到編譯期間(錯誤等級的提升)
- 避免強制類型轉(zhuǎn)換丟失精度等問題的出現(xiàn)
4 - 泛型類
/**
* @author Mr.樂
* @Description 泛型類
* E - Element
* K - Key
* T - Type
* V - Value
*/
public class Generic<T> {
//這個成員變量的類型為T,T的類型由外部指定
private T t;
public T getT() {
return t;
}
public void setT(T t) {
this.t = t;
}
}
-------------------------------------
/**
* @author Mr.樂
* @Description 泛型類測試類
*/
public class Demo01 {
public static void main(String[] args) {
Generic<String> strG = new Generic<>();//創(chuàng)建泛型類對象
strG.setT("我是一個字符串!~");
System.out.println(strG.getT());
Generic<Integer> intG = new Generic<>();
intG.setT(1314);
System.out.println(intG.getT());
}
}5 -泛型方法
/**
* @author Mr.樂
* @Description
*/
public class Generic {
//泛型方法
/*public <T> void show(T i) {
System.out.println(i);
}*/
//有返回值類型的泛型方法
public <T> T show(T i) {
return i;
}
}
-----------------------------
/**
* @author Mr.樂
* @Description
*/
public class Demo02 {
public static void main(String[] args) {
Generic g = new Generic();//創(chuàng)建泛型方法類的對象
System.out.println(g.show(1314));
g.show("String");
g.show(3.14f);
g.show(new Student("Andy",18));
}
}6 - 泛型接口
/**
* @author Mr.樂
* @Description
*/
public interface Generic <T>{
void show(T t);
}
----------------------------------
/**
* @author Mr.樂
* @Description
*/
public class GenericImpl <T> implements Generic<T>{
@Override
public void show(T t) {
System.out.println("我是實現(xiàn)類中的show方法:" + t);
}
}
---------------------------------------------------------------------
/**
* @author Mr.樂
* @Description
*/
public class Demo03 {
public static void main(String[] args) {
GenericImpl<String> strG = new GenericImpl<>();
strG.show("字符串");
//通過匿名內(nèi)部類實現(xiàn)
new Generic<Integer>() {
@Override
public void show(Integer integer) {
System.out.println("我是匿名內(nèi)部類的show方法" + integer);
}
}.show(1314);
}
}7 - 泛型通配符
import java.util.ArrayList;
/**
* @author Mr.樂
* @Description 泛型通配符
*/
public class demo04 {
public static void main(String[] args) {
//<?> 通配所有 相當于Object
ArrayList<?> list01 = new ArrayList<Object>();
ArrayList<?> list02 = new ArrayList<Integer>();//Integer為Object子類
ArrayList<?> list03 = new ArrayList<Float>();
ArrayList<?> list04 = new ArrayList<Number>();
//<? extends Number> 上限 ?僅為Number類及子類
ArrayList<? extends Number> list05 = new ArrayList<Number>();
ArrayList<? extends Number> list06 = new ArrayList<Integer>();
ArrayList<? extends Number> list07 = new ArrayList<Float>();
// ArrayList<? extends Number> list08 = new ArrayList<String>();
//<? super Number> 下限 ?僅為Number類及父類
ArrayList<? super Number> list09 = new ArrayList<Number>();
// ArrayList<? super Number> list10 = new ArrayList<Integer>();
// ArrayList<? super Number> list11 = new ArrayList<String>();
ArrayList<? super Number> list12 = new ArrayList<Object>();
}
}8 - 泛型通配符的基本應(yīng)用
import java.util.ArrayList;
/**
* @author Mr.樂
* @Description 泛型通配符的基本應(yīng)用
*/
public class Demo05 {
public static void main(String[] args) {
ArrayList<String> strList = new ArrayList<>();
show(strList);
// showUp(strList);
// showDown(strList);
ArrayList<Integer> intList = new ArrayList<>();
show(intList);
showUp(intList);
// showDown(intList);
ArrayList<Number> numList = new ArrayList<>();
show(numList);
showUp(numList);
showDown(numList);
ArrayList<Object> objList = new ArrayList<>();
show(objList);
// showUp(objList);
showDown(objList);
}
//<?> 表示通配所有
private static void show(ArrayList<?> list){
}
//表示上限
private static void showUp(ArrayList<? extends Number> list){
}
//表示下限
private static void showDown(ArrayList<? super Number> list){
}
}總結(jié)
泛型,大家用到最多的就是在集合中,在實際的開發(fā)過程中,自己可以使用泛型去簡化開發(fā),保證同種類型,能很好的保證代碼質(zhì)量。
到此這篇關(guān)于Java中泛型的接口、通配符使用詳解的文章就介紹到這了,更多相關(guān)Java中的泛型內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot集成 Prometheus進行高效監(jiān)控的實現(xiàn)
Prometheus作為一個開源的監(jiān)控和告警工具,以其強大的數(shù)據(jù)采集、存儲和查詢能力,受到了眾多開發(fā)者的青睞,本文主要介紹了SpringBoot集成 Prometheus進行高效監(jiān)控的實現(xiàn),感興趣的可以了解一下2024-07-07
詳解mybatis中association和collection的column傳入多個參數(shù)問題
這篇文章主要介紹了詳解mybatis中association和collection的column傳入多個參數(shù)問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-10-10
Spring Boot ActiveMQ發(fā)布/訂閱消息模式原理解析
這篇文章主要介紹了Spring Boot ActiveMQ發(fā)布/訂閱消息模式原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-07-07
如何用Java來進行文件切割和簡單的內(nèi)容過濾的實現(xiàn)
這篇文章主要介紹了如何用Java來進行文件切割和簡單的內(nèi)容過濾的實現(xiàn),具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-01-01
Java網(wǎng)絡(luò)編程之UDP實現(xiàn)原理解析
UDP實現(xiàn)通信非常簡單,沒有服務(wù)器,每個都是客戶端,每個客戶端都需要一個發(fā)送端口和一個接收端口,本文給大家介紹Java網(wǎng)絡(luò)編程之UDP實現(xiàn)原理解析,感興趣的朋友一起看看吧2021-09-09

