一篇文章帶你了解java泛型--泛型類,泛型方法,泛型接口
Java 泛型
Java 泛型是什么
官方定義:
泛型是Java SE 1.5的新特性,泛型的本質(zhì)就是參數(shù)化類型,也就是說所操作的數(shù)據(jù)類型被指定為一個參數(shù)
這種參數(shù)類型可以用在類、接口和方法的創(chuàng)建中,分別成為泛型類、泛型接口、泛型方法
優(yōu)缺點(diǎn):
優(yōu)點(diǎn):可以不用再類型轉(zhuǎn)換了
缺點(diǎn):降低了代碼的可讀性
泛型類
泛型類:當(dāng)一個類要操作的引用數(shù)據(jù)類型不確定的時候,可以給該類定義一個形參,用到這個類的時候,通過傳遞類型參數(shù)的形式,來確定要操作的具體的對象類型。在JDK1.5之前,為了提高代碼的通用性,通常把類型定義為所有類的父類型:Object,這樣做有兩大弊端:1、在具體操作的時候要進(jìn)行強(qiáng)制類型轉(zhuǎn)換;2、這樣還是指定了類型,還是不靈活,對具體類型的方法未知且不安全
泛型類的格式
泛型類的格式:在類名后面聲明類型變量,泛型類可以有多個類型變量
如:
public class Myname <K,V>
什么時候使用泛型類:只要類中操作的引用數(shù)據(jù)類型不確定,就可以定義泛型類。通過使用泛型類,可以省去強(qiáng)制類型轉(zhuǎn)換的類型轉(zhuǎn)換異常的麻煩
泛型類舉例
泛型類:
public class FanXingLei<T> { public T getE(T t) { return t; } }
學(xué)生類:
public class Student { public String name; public int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Student(String name, int age) { super(); this.name = name; this.age = age; } @Override public String toString() { return "Student [name=" + name + ", age=" + age + "]"; } }
教師類:
public class Teacher { public String name; public int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Teacher(String name, int age) { super(); this.name = name; this.age = age; } @Override public String toString() { return "Teacher [name=" + name + ", age=" + age + "]"; } }
測試類:
public static void main(String[] args) { FanXingLei<Student> stu=new FanXingLei<Student>(); Student student=new Student("小明", 20); Teacher teacher=new Teacher("小紅", 27); FanXingLei<Teacher> tu=new FanXingLei<Teacher>(); System.out.println(stu.getE(student).getClass().getName()); System.out.println(tu.getE(teacher).getClass().getName()); System.out.println(stu.getE(student).toString()); System.out.println(tu.getE(teacher).toString()); } }
打印結(jié)果:
rj.cd.Fx01.Student
rj.cd.Fx01.Teacher
Student [name=小明, age=20]
Teacher [name=小紅, age=27]
泛型方法
目的:泛型方法也是為了調(diào)高代碼的重用性和程序安全性。編程原則:盡量設(shè)計泛型方法解決問題,如果設(shè)計泛型方法可以取代泛型整個類,應(yīng)該采用泛型方法(如果泛型方法可以搞定就不建議使用泛型類)。
泛型方法的格式
泛型方法的格式:類型變量放在修飾符后面和返回類型前面,如:
public static <E> E getMax(T...in) //三個點(diǎn)表示為多個參數(shù)
泛型方法舉例
public class Test { public static void main(String[] args) { print("你好"); print(200); print(true); print(99.9); } public static <T> void print(T t) { System.out.println(t); } }
打印結(jié)果:
你好
200
true
99.9
泛型接口
將泛型原理用于接口實(shí)現(xiàn)中,就是泛型接口。
泛型接口的格式
泛型接口的格式:泛型接口格式類似于泛型類的格式,接口中的方法的格式類似于泛型方法的格式
public interface IFanXingJieKou<T>
泛型接口舉例
泛型接口類:
public interface IFanXingJieKou <T> { public T read(T t); }
泛型接口實(shí)現(xiàn)類:
public class FanXingImpl implements IFanXingJieKou<String> { @Override public String read(String t) { return t; } }
測試接口類:
public class Test { public static void main(String[] args) { IFanXingJieKou<String> fK=new FanXingImpl(); System.out.println(fK.read("hello")); } }
打印結(jié)果:
hello
總結(jié)
本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
使用String轉(zhuǎn)換到Map結(jié)構(gòu)
這篇文章主要介紹了使用String轉(zhuǎn)換到Map結(jié)構(gòu),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11快速搭建Spring Boot+MyBatis的項目IDEA(附源碼下載)
這篇文章主要介紹了快速搭建Spring Boot+MyBatis的項目IDEA(附源碼下載),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12java正則表達(dá)式之Pattern與Matcher類詳解
這篇文章主要給大家介紹了關(guān)于java正則表達(dá)式之Pattern與Matcher類的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09Java中實(shí)現(xiàn)多重排序的幾種方法小結(jié)
Java中的多重排序通常指的是同時對一個集合中的兩個或更多列或多維度的數(shù)據(jù)進(jìn)行排序,這通常通過自定義Comparator實(shí)現(xiàn),可以結(jié)合Arrays.sort()或Collections.sort()方法,當(dāng)需要進(jìn)行多重排序時,即根據(jù)多個字段進(jìn)行排序,我們可以采用以下幾種方法2024-10-10Java設(shè)計模式以虹貓藍(lán)兔的故事講解適配器模式
適配器模式(Adapter?Pattern)是作為兩個不兼容的接口之間的橋梁。這種類型的設(shè)計模式屬于結(jié)構(gòu)型模式,它結(jié)合了兩個獨(dú)立接口的功能2022-04-04Java中for(;;)和while(true)的區(qū)別
這篇文章主要介紹了 Java中for(;;)和while(true)的區(qū)別,文章圍繞for(;;)和while(true)的相關(guān)自來哦展開詳細(xì)內(nèi)容,需要的小伙伴可以參考一下,希望對大家有所幫助2021-11-11