1. 程式人生 > >Java泛型--泛型應用--泛型介面、泛型方法、泛型陣列、泛型巢狀

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