Java泛型--泛型應用--泛型介面、泛型方法、泛型陣列、泛型巢狀
1、泛型介面
1.1泛型介面的基本概念
1.2泛型介面實現的兩種方式
定義子類:在子類的定義上也宣告泛型型別如果現在實現介面的子類不想使用泛型宣告,則在實現介面的時候直接指定好其具體的操作型別即可:interface Info<T>{ // 在介面上定義泛型 public T getVar() ; // 定義抽象方法,抽象方法的返回值就是泛型型別 } class InfoImpl<T> implements Info<T>{ // 定義泛型介面的子類 private T var ; // 定義屬性 public InfoImpl(T var){ // 通過構造方法設定屬性內容 this.setVar(var) ; } public void setVar(T var){ this.var = var ; } public T getVar(){ return this.var ; } }; public class GenericsDemo24{ public static void main(String arsg[]){ Info<String> i = null; // 宣告介面物件 i = new InfoImpl<String>("李興華") ; // 通過子類例項化物件 System.out.println("內容:" + i.getVar()) ; } };
interface Info<T>{ // 在介面上定義泛型 public T getVar() ; // 定義抽象方法,抽象方法的返回值就是泛型型別 } class InfoImpl implements Info<String>{ // 定義泛型介面的子類 private String var ; // 定義屬性 public InfoImpl(String var){ // 通過構造方法設定屬性內容 this.setVar(var) ; } public void setVar(String var){ this.var = var ; } public String getVar(){ return this.var ; } }; public class GenericsDemo25{ public static void main(String arsg[]){ Info i = null; // 宣告介面物件 i = new InfoImpl("李興華") ; // 通過子類例項化物件 System.out.println("內容:" + i.getVar()) ; } };
2、泛型方法
2.1定義泛型方法
class Demo{ public <T> T fun(T t){ // 可以接收任意型別的資料 return t ; // 直接把引數返回 } }; public class GenericsDemo26{ public static void main(String args[]){ Demo d = new Demo() ; // 例項化Demo物件 String str = d.fun("李興華") ; // 傳遞字串 int i = d.fun(30) ; // 傳遞數字,自動裝箱 System.out.println(str) ; // 輸出內容 System.out.println(i) ; // 輸出內容 } };
2.2通過泛型方法返回泛型類的例項
class Info<T extends Number>{ // 指定上限,只能是數字型別
private T var ; // 此型別由外部決定
public T getVar(){
return this.var ;
}
public void setVar(T var){
this.var = var ;
}
public String toString(){ // 覆寫Object類中的toString()方法
return this.var.toString() ;
}
};
public class GenericsDemo27{
public static void main(String args[]){
Info<Integer> i = fun(30) ;
System.out.println(i.getVar()) ;
}
public static <T extends Number> Info<T> fun(T param){
Info<T> temp = new Info<T>() ; // 根據傳入的資料型別例項化Info
temp.setVar(param) ; // 將傳遞的內容設定到Info物件的var屬性之中
return temp ; // 返回例項化物件
}
};
2.3使用泛型統一傳入引數的型別
class Info<T>{ // 指定上限,只能是數字型別
private T var ; // 此型別由外部決定
public T getVar(){
return this.var ;
}
public void setVar(T var){
this.var = var ;
}
public String toString(){ // 覆寫Object類中的toString()方法
return this.var.toString() ;
}
};
public class GenericsDemo28{
public static void main(String args[]){
Info<String> i1 = new Info<String>() ;
Info<String> i2 = new Info<String>() ;
i1.setVar("HELLO") ; // 設定內容
i2.setVar("李興華") ; // 設定內容
add(i1,i2) ;
}
public static <T> void add(Info<T> i1,Info<T> i2){
System.out.println(i1.getVar() + " " + i2.getVar()) ;
}
};
如果add方法中兩個泛型的型別不統一,則編譯會出錯。
class Info<T>{ // 指定上限,只能是數字型別
private T var ; // 此型別由外部決定
public T getVar(){
return this.var ;
}
public void setVar(T var){
this.var = var ;
}
public String toString(){ // 覆寫Object類中的toString()方法
return this.var.toString() ;
}
};
public class GenericsDemo29{
public static void main(String args[]){
Info<Integer> i1 = new Info<Integer>() ;
Info<String> i2 = new Info<String>() ;
i1.setVar(30) ; // 設定內容
i2.setVar("李興華") ; // 設定內容
add(i1,i2) ;
}
public static <T> void add(Info<T> i1,Info<T> i2){
System.out.println(i1.getVar() + " " + i2.getVar()) ;
}
};
3、泛型陣列
public class GenericsDemo30{
public static void main(String args[]){
Integer i[] = fun1(1,2,3,4,5,6) ; // 返回泛型陣列
fun2(i) ;
}
public static <T> T[] fun1(T...arg){ // 接收可變引數
return arg ; // 返回泛型陣列
}
public static <T> void fun2(T param[]){ // 輸出
System.out.print("接收泛型陣列:") ;
for(T t:param){
System.out.print(t + "、") ;
}
}
};
4、泛型的巢狀設定
Demo類中的info屬性是Info類的這種屬性,Info類本身需要兩個泛型。class Info<T,V>{ // 接收兩個泛型型別
private T var ;
private V value ;
public Info(T var,V value){
this.setVar(var) ;
this.setValue(value) ;
}
public void setVar(T var){
this.var = var ;
}
public void setValue(V value){
this.value = value ;
}
public T getVar(){
return this.var ;
}
public V getValue(){
return this.value ;
}
};
class Demo<S>{
private S info ;
public Demo(S info){
this.setInfo(info) ;
}
public void setInfo(S info){
this.info = info ;
}
public S getInfo(){
return this.info ;
}
};
public class GenericsDemo31{
public static void main(String args[]){
Demo<Info<String,Integer>> d = null ; // 將Info作為Demo的泛型型別
Info<String,Integer> i = null ; // Info指定兩個泛型型別
i = new Info<String,Integer>("李興華",30) ; // 例項化Info物件
d = new Demo<Info<String,Integer>>(i) ; // 在Demo類中設定Info類的物件
System.out.println("內容一:" + d.getInfo().getVar()) ;
System.out.println("內容二:" + d.getInfo().getValue()) ;
}
};
相關推薦
2.Java陣列_一維陣列二維陣列的動態初始化與靜態初始化、方法接收/返回/修改陣列、java對陣列的排序/全拷貝/部分拷貝
Java陣列----引用資料型別,必須在使用前先初始化;否則會nullPointerException(執行時異常)。 (引用傳遞:多個棧記憶體指向同一塊堆記憶體) 1.一維陣列初始化 (1)動態初始化(宣告並開闢陣列) 資料型別[] 陣列名稱 = new 資料型別[長度]; 如
JAVA泛型與棧應用
從JDK1.5以後引入了三大常用新特性:泛型(Genericity)、列舉(enum)、註解(Annotation)。其中在JDK1.5中泛型是一個非常重要的實現技術,它可以幫助我們解決程式的引數轉換問題。 泛型假設需要定義一個描述座標的程式類Poi
Java泛型--泛型應用--泛型介面、泛型方法、泛型陣列、泛型巢狀
1、泛型介面 1.1泛型介面的基本概念 1.2泛型介面實現的兩種方式 定義子類:在子類的定義上也宣告泛型型別 interface Info<T>{ // 在介面上定義泛型 pub
java-泛型陣列,泛型以及列舉
列舉: java不允許用=為列舉常量賦值,列舉中的構造方法必須為private修飾 列舉中values方法將列舉型別的成員以陣列的形式返回 toString方法能夠返回列舉常量名 ordinal方法返回enumeration宣告中列舉常量的位置 列舉是一個類,可以有自己的屬性和方法並且實現
Java 知識點整理-10.Java集合框架 去除ArrayList中重複字串、自定義物件 棧和佇列 泛型 JDK5新特性 asList() toArray(T[] a) ArrayList迴圈巢狀
詳細標題:去除ArrayList中重複字串、自定義物件元素方式 棧和佇列 泛型 JDK5新特性(增強for迴圈 三種迭代(普通for、迭代器、增強for)中的元素能否刪除 靜態匯入 可變引數)Arrays工具類的asList() Collection中toArray(T[] a) 集合巢狀之Arra
泛型類的應用
編寫一個泛型類Simulator,該類能模擬不同動物的叫聲,並編寫測試類進行測試。 class Simulator<E>{ E animal; public Simulator(E a){ animal=a; } public String
Java筆記(一) 協變性、陣列與泛型
前言 在開始前,我們先看一段有點“誤導性”的程式碼,下面的程式碼在編譯時不會產生任何異常。 package test; public class Test { private interface Shape{ } private class Square impl
java-ArrayList中去重複字串或重複物件、LinkedList集合、泛型、增強for、靜態匯入、可變引數、asList()方法、集合巢狀
1、去除ArrayList中重複字串元素方式 * A:案例演示 * 需求:ArrayList去除集合中字串的重複值(字串的內容相同) * 思路:建立新集合方式 /** * A:案例演示 * 需求:ArrayList去除集合中字串的重複值(字串的內容相同)
java 泛型詳解(普通泛型、 萬用字元、 泛型介面,泛型陣列,泛型方法,泛型巢狀)
JDK1.5 令我們期待很久,可是當他釋出的時候卻更換版本號為5.0。這說明Java已經有大幅度的變化。本文將講解JDK5.0支援的新功能-----Java的泛型. 1、Java泛型 其實Java
泛型陣列+泛型巢狀+泛型應用例項
泛型陣列 使用泛型方法時,也可以傳遞和返回一個泛型陣列。 【接收和返回泛型陣列】 @SuppressWarnings("unchecked") public class GeneriseDemo30 { public static void
Java泛型巢狀示例
/* * 泛型巢狀例項 * date: 2012-10-22 * author: Alex Hohh */ // 泛型類Info<K,V> class Info<K,V>{
C# ORM中反射與泛型的交叉應用
好久沒有寫文章了,終於找到工作,抽空寫一下冒個泡。 問題 最近遇到一個這樣 ORM 的問題,一個返回型別為 List 泛型方法中,需要做到根據條件訪問資料庫,並且把得到的結果存入 List 中返回。 由於只是以前學過一段時間的 C#,而且反射
泛型的典型應用:人的資訊類和介面
interface Info{ } class Contact implements Info{private String address;private String telephone;private String email;public Contact(Strin
JAVA中List陣列與泛型
去除ArrayList中重複字串元素方式 A:案例演示 需求:ArrayList去除集合中字串的重複值(字串的內容相同) 思路:建立新集合方式 /** * A:案例演示 * 需求:ArrayList去除集合中字串的重複值(字串的內容相同) * 思
Java泛型---泛型的巢狀
泛型巢狀的使用 建立一個PO類/** * 測試泛型的巢狀 * @author Administrator * * @param <T> */ public class Class01<T> { private T stu; p
Java中泛型二分查詢,繼承Comparable介面
優點是比較次數少,查詢速度快,平均效能好;其缺點是要求待查表為有序表,且插入刪除困難。 演算法很簡單,直接上程式碼。 public static<E extends Comparable <E>>int BinarySearch(E [] list,
泛型方法或泛型類中的方法是內部調用、PInvoke 或是在 COM 導入類中定義的。
imp services != keys inter 解決 ade dex virt 泛型基類中引用Api函數定義時static extern,在子類中會提示: 未處理TypeLoadException 泛型方法或泛型類中的方法是內部調用、PInvoke 或是在 COM 導
C#泛型效能之List<T>類序列、陣列、ArrayList類序列的排序效能差異
綜上所述,在List<T>類序列、ArrayList類序列、陣列三種資料結構中: 對值型別元素進行排序 效能最優的是List<T>類序列;其次是陣列;而ArrayList類序列略微慢於陣列。 對sting型別元素進行排序: 效能最優的是ArrayList類
Typescript | 二維陣列(泛型)矩陣行列互換
/* * @Author: Prpr_Saber * @Date: 2018-11-02 17:06:29 * @Last Modified by: Prpr_Saber * @Last Modified time: 2018-11-02 21:41:47 */ export let t
使用swagger-bootstarap-ui 響應類3層巢狀泛型顯示的坑
正常一個分頁查詢的介面返回格式應該是 返回 資料統一的封裝類<分頁資料<要展示的資料類>> 得到的也就是一個3層巢狀2層泛型的資料結構! 也就是這樣 其實也就是 PageHelper 提供的 pageInfo 資訊的複製 加上sw