一篇文章帶你了解java泛型--泛型類,泛型方法,泛型接口
Java 泛型
Java 泛型是什么
官方定義:
泛型是Java SE 1.5的新特性,泛型的本質(zhì)就是參數(shù)化類型,也就是說所操作的數(shù)據(jù)類型被指定為一個(gè)參數(shù)
這種參數(shù)類型可以用在類、接口和方法的創(chuàng)建中,分別成為泛型類、泛型接口、泛型方法
優(yōu)缺點(diǎn):
優(yōu)點(diǎn):可以不用再類型轉(zhuǎn)換了
缺點(diǎn):降低了代碼的可讀性
泛型類
泛型類:當(dāng)一個(gè)類要操作的引用數(shù)據(jù)類型不確定的時(shí)候,可以給該類定義一個(gè)形參,用到這個(gè)類的時(shí)候,通過傳遞類型參數(shù)的形式,來確定要操作的具體的對(duì)象類型。在JDK1.5之前,為了提高代碼的通用性,通常把類型定義為所有類的父類型:Object,這樣做有兩大弊端:1、在具體操作的時(shí)候要進(jìn)行強(qiáng)制類型轉(zhuǎn)換;2、這樣還是指定了類型,還是不靈活,對(duì)具體類型的方法未知且不安全
泛型類的格式
泛型類的格式:在類名后面聲明類型變量,泛型類可以有多個(gè)類型變量
如:
public class Myname <K,V>
什么時(shí)候使用泛型類:只要類中操作的引用數(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 + "]";
}
}
測(cè)試類:
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è)計(jì)泛型方法解決問題,如果設(shè)計(jì)泛型方法可以取代泛型整個(gè)類,應(yīng)該采用泛型方法(如果泛型方法可以搞定就不建議使用泛型類)。
泛型方法的格式
泛型方法的格式:類型變量放在修飾符后面和返回類型前面,如:
public static <E> E getMax(T...in) //三個(gè)點(diǎn)表示為多個(gè)參數(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;
}
}
測(cè)試接口類:
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)文章
Django rest framework使用類視圖實(shí)現(xiàn)首頁API
這篇文章主要介紹了Django rest framework使用類視圖實(shí)現(xiàn)首頁API,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
用Maven插件生成Mybatis代碼的實(shí)現(xiàn)方法
本文主要介紹 Maven插件生成Mybatis代碼,現(xiàn)在做開發(fā)的朋友有好多用Maven 來管理代碼,這里給大家舉個(gè)例子,有需要的同學(xué)可以看下2016-07-07
SpringBoot?LocalDateTime格式轉(zhuǎn)換方案詳解(前端入?yún)?
這篇文章主要介紹了SpringBoot?LocalDateTime格式轉(zhuǎn)換(前端入?yún)?,本文用示例介紹SpringBoot全局格式配置,將前端傳過來的時(shí)間自動(dòng)轉(zhuǎn)化為LocalDateTime,需要的朋友可以參考下2023-04-04
SpringBoot整合Flyway實(shí)現(xiàn)數(shù)據(jù)庫的初始化和版本管理操作
Flyway?是一款開源的數(shù)據(jù)庫版本管理工具,它可以很方便的在命令行中使用,或者在Java應(yīng)用程序中引入,用于管理我們的數(shù)據(jù)庫版本,這篇文章主要介紹了SpringBoot整合Flyway實(shí)現(xiàn)數(shù)據(jù)庫的初始化和版本管理,需要的朋友可以參考下2023-06-06
分析xxljob登入功能集成OIDC的統(tǒng)一認(rèn)證
這篇文章主要為大家介紹分析xxljob登入功能集成OIDC的統(tǒng)一認(rèn)證的詳解說明,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-02-02

