JAVA橋接方法

2021-08-31 18:49:18 字數 2119 閱讀 5507

隨著jdk的發展,到1.5的時候,引入了泛型(generics)的概念。由於集合類的廣泛使用,不得不加上一些安全考慮,因為傳統的集合是可以新增任意的型別的資料,我們在取資料的時候,還需要進行手動強制轉型,但是我們並不知道我們取出的資料是什麼型別的,比如:

乙個list集合,先加入string,再加入object,再加入date,隨著容器的擴大,我們根本分不清當前索引位置的值到底是什麼型別,所以乙個操作不慎,將丟擲型別轉換異常classcastexception。所以,為了規避這種問題,sun公司設計了泛型(generics),目的是再編譯器對**進行檢查,確保集合型別的資料一致性。

泛型的定義

介面定義

public

inte***ce

generices

類定義

public

class

impl

implements

generices

方法定義

public

t get

(class

clz)

泛型約束

泛型有著與物件類似的機制,父子關係,我們可以為我們的泛型定義範圍。

比如使用,表示t必須是類k的子類,或者介面k的實現類。

比如使用,表示t必須是類k的父類,或類k實現的介面。

注意:extends並不表示類的繼承含義,只是表示泛型的範圍關係。

注意:extends中可以指定多個範圍,實行泛型型別檢查約束時,會以最左邊的為準。

泛型擦除

前面提到的,這個檢查只是在編譯時有效,因此在開發工具ide中,我們寫的集合**不合法都會給出警告提示。實質在執行時這個束縛是會被移除的,這就是所謂的泛型擦除,在編譯結束後,所有的泛型標識都會被刪除。生成原生的object物件,然後jdk自動幫我們轉成對應的型別。

橋接的由來

由於泛型機制的出現,我們最終編譯的方法將會是object型別的,我們所呼叫的方法,返回的型別也都是object型別,這樣明顯不符合重寫方法的概念,我們在方法呼叫時,最終返回的應該是object型別的物件才對,但是,jdk為我們做了很多輔助的工作,讓我們簡化了這個流程,也就是說,jdk幫我們做了這個轉化工作,將object型別轉化成實際呼叫的型別,比如list,那麼object會轉化成string型別。

具體是怎麼由來的呢?,這個就是所謂的橋接(bridge)方法,jdk在為存在泛型的類,執行完編譯後自動生成的方法,當我們呼叫父類的方法時,會首先呼叫這個橋接方法,然後橋接方法內呼叫子類實現的方法,將對呼叫引數轉型。

舉個栗子:

父類:

public

class

parent

子類:

public

class

children extend parent

public object get

(object o)

}

以上類,代表編譯之後的結果,parent呼叫childrenget(object o )方法,再呼叫get(string str)。所以隨著泛型的產生,也衍生出了@overried註解,這就是為什麼ide老是提示我們需要加上這個註解的原因。

橋接的鑑別

method類中提供了鑑別是否為橋接方法的工具isbridge就是來判定,到時是泛型橋接而來,還是原生方法。

qemu 橋接配置方法

參考在 openstack 或在 ubuntu 中配置物理網路 網路用於 kvm 橋接 使用 bond vlan 作為物理網絡卡配置手段 物理機具有 eth0,eth1 兩個網絡卡 eth0,eth1 組成 bond0 使用了 bonding mode4 功能,支援了高可用 bond0.20 是物理...

Java設計模式 橋接模式

橋接模式是一種結構型的設計模式,主要是特點是將抽象部分與實現部分分離開來,從而能夠進行獨自的變化。在橋接模式中,所謂的橋,個人理解是在抽象層中,將介面聯絡到乙個抽象類中,更確切的說,是依賴關係。橋接模式主要適用場景是,某個物件需要從兩個或者多個 一般是兩個 維度進行描述或者操作的時候,能夠簡潔的進行...

java 設計模式之橋接模式

今天看了下設計模式中的橋接模式,發現還是很有趣味的,筆記之。舉個例子,比如gg要約會mm,不同的mm喜歡喜歡不同的地點,比如rose喜歡去電影院,kitty喜歡去西餐廳,而tom,peter 都是gg,他們要分別去約會這兩位mm了,而約會的地點,全部由mm決定 首先是mm介面 package com...