本篇文章帶給大家的內容是關於Java中泛型是什麼? Java泛型的詳細介紹,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
一、什麼是泛型?
Java泛型設計原則:只要在編譯時期沒有出現警告,那麼運行時期就不會出現ClassCastException異常.
泛型:把類型明確的工作延後到建立物件或呼叫方法的時候才去明確的特殊的型別
參數化型別:
ArrayList
ArrayList
整個稱為ArrayList
整個ArrayList
二、為什麼需要泛型
有了泛型以後:
#程式碼更簡潔【不用強制轉換】
#程式比較健壯【只要編譯時期沒有警告,那麼運行時期就不會出現ClassCastException異常】
可讀性與穩定性【在寫集合的時候,就限定了型別】
在建立集合的時候,我們明確了集合的型別了,所以我們可以使用增強for來遍歷集合!
//创建集合对象 ArrayList<string> list = new ArrayList(); list.add("hello"); list.add("world"); list.add("java"); //遍历,由于明确了类型.我们可以增强for for (String s : list) { System.out.println(s); }</string>
三、泛型基礎
泛型類別就是把泛型定義在類別上,使用者使用該類別的時候,才把類型明確下來….這樣的話,使用者明確了什麼類型,這類就代表著什麼類型…使用者在使用的時候就不用擔心強轉的問題,執行時轉換異常的問題了。
在類別上定義的泛型,在類別的方法中也可以使用!
/* 1:把泛型定义在类上 2:类型变量定义在类上,方法中也可以使用 */ public class ObjectTool<t> { private T obj; public T getObj() { return obj; } public void setObj(T obj) { this.obj = obj; } }</t>
使用者想要使用哪種類型,就在建立的時候指定類型。使用的時候,該類別就會自動轉換成使用者想要使用的類型了。
public static void main(String[] args) {
//创建对象并指定元素类型 ObjectTool<string> tool = new ObjectTool(); tool.setObj(new String("钟福成")); String s = tool.getObj(); System.out.println(s); //创建对象并指定元素类型 ObjectTool<integer> objectTool = new ObjectTool(); /** * 如果我在这个对象里传入的是String类型的,它在编译时期就通过不了了. */ objectTool.setObj(10); int i = objectTool.getObj(); System.out.println(i);</integer></string>
}
定義泛型方法….泛型是先定義後使用的
//定义泛型方法.. public <t> void show(T t) { System.out.println(t); }</t>
使用者傳遞進來的是什麼類型,傳回值就是什麼類型了
public static void main(String[] args) { //创建对象 ObjectTool tool = new ObjectTool(); //调用方法,传入的参数是什么类型,返回值就是什么类型 tool.show("hello"); tool.show(12); tool.show(12.5); }
子類別明確泛型類別的類型參數變數
/* 把泛型定义在接口上 */ public interface Inter<t> { public abstract void show(T t); }</t>
實作泛型介面的類別…..
/** * 子类明确泛型类的类型参数变量: */ public class InterImpl implements Inter<string> { @Override public void show(String s) { System.out.println(s); } }</string>
四、泛型的應用程式
當我們寫網頁的時候,常常會有多個DAO,我們要寫每次都要寫好幾個DAO,這樣會有點麻煩。
public abstract class BaseDao<t> { //模拟hibernate.... private Session session; private Class clazz; //哪个子类调的这个方法,得到的class就是子类处理的类型(非常重要) public BaseDao(){ Class clazz = this.getClass(); //拿到的是子类 ParameterizedType pt = (ParameterizedType) clazz.getGenericSuperclass(); //BaseDao<category> clazz = (Class) pt.getActualTypeArguments()[0]; System.out.println(clazz); } public void add(T t){ session.save(t); } public T find(String id){ return (T) session.get(clazz, id); } public void update(T t){ session.update(t); } public void delete(String id){ T t = (T) session.get(clazz, id); session.delete(t); } }</category></t>
繼承抽象DAO,這實作類別就有對應的增刪改查的方法了。
public class CategoryDao extends BaseDao<category> { } BookDao public class BookDao extends BaseDao<book> { }</book></category>
以上是Java中泛型是什麼? Java泛型的詳細介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于结构化数据处理开源库SPL的相关问题,下面就一起来看一下java下理想的结构化数据处理类库,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于PriorityQueue优先级队列的相关知识,Java集合框架中提供了PriorityQueue和PriorityBlockingQueue两种类型的优先级队列,PriorityQueue是线程不安全的,PriorityBlockingQueue是线程安全的,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于java锁的相关问题,包括了独占锁、悲观锁、乐观锁、共享锁等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于多线程的相关问题,包括了线程安装、线程加锁与线程不安全的原因、线程安全的标准类等等内容,希望对大家有帮助。

本篇文章给大家带来了关于Java的相关知识,其中主要介绍了关于关键字中this和super的相关问题,以及他们的一些区别,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于枚举的相关问题,包括了枚举的基本操作、集合类对枚举的支持等等内容,下面一起来看一下,希望对大家有帮助。

封装是一种信息隐藏技术,是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法;封装可以被认为是一个保护屏障,防止指定类的代码和数据被外部类定义的代码随机访问。封装可以通过关键字private,protected和public实现。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于设计模式的相关问题,主要将装饰器模式的相关内容,指在不改变现有对象结构的情况下,动态地给该对象增加一些职责的模式,希望对大家有帮助。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

Dreamweaver Mac版
視覺化網頁開發工具