欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

創(chuàng)建類的方法及裝置與流程

文檔序號(hào):11582326閱讀:259來(lái)源:國(guó)知局
創(chuàng)建類的方法及裝置與流程

本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,具體地,涉及一種創(chuàng)建類的方法及裝置。



背景技術(shù):

java是一種面向?qū)ο蟮木幊陶Z(yǔ)言,也是世界上最流行的編程語(yǔ)言之一,其特點(diǎn)是一個(gè)類只能繼承一個(gè)父類,但是可以實(shí)現(xiàn)多個(gè)接口。多態(tài)是面向?qū)ο蟪绦蛟O(shè)計(jì)的一個(gè)重要特征,指jvm(javavirtualmachine,java虛擬機(jī))在運(yùn)行時(shí)能夠根據(jù)調(diào)用方法的實(shí)例的具體類型來(lái)選擇調(diào)用哪個(gè)方法。java中的多態(tài)通常是在父類中定義方法或者在接口中定義方法,實(shí)現(xiàn)類繼承父類或者實(shí)現(xiàn)接口之后,由jvm在運(yùn)行時(shí)根據(jù)實(shí)現(xiàn)類的具體類型來(lái)進(jìn)行方法調(diào)用。

目前,oracle(甲骨文公司)的jvm是世界上最流行的java虛擬機(jī)之一,廣泛用于各種領(lǐng)域。oracle的jvm載入java類時(shí),子類在內(nèi)存中會(huì)先排列父類的方法,后排列接口中的方法,接口中的方法在實(shí)現(xiàn)類中的位置是無(wú)法確定的,因此在以接口的方式實(shí)現(xiàn)多態(tài)時(shí),需要先根據(jù)函數(shù)簽名進(jìn)行查找,再將查找到的方法排列到實(shí)現(xiàn)類中??梢?jiàn),通過(guò)接口實(shí)現(xiàn)多態(tài)的步驟較多,實(shí)現(xiàn)多態(tài)的效率較低,程序運(yùn)行速度較慢。



技術(shù)實(shí)現(xiàn)要素:

本發(fā)明的目的是提供一種創(chuàng)建類的方法及裝置,用于提高java中實(shí)現(xiàn)多態(tài)的效率。

根據(jù)本發(fā)明實(shí)施例的第一方面,提供一種創(chuàng)建類的方法,包括:

確定java程序中用于實(shí)現(xiàn)多態(tài)的第一接口是否滿足預(yù)設(shè)條件;

在所述第一接口滿足所述預(yù)設(shè)條件時(shí),基于所述第一接口創(chuàng)建第一抽象類,其中,所述第一抽象類包括所述第一接口所包括的全部方法;

令所述java程序中實(shí)現(xiàn)所述第一接口的全部實(shí)現(xiàn)類在運(yùn)行所述java程序時(shí)繼承所述第一抽象類包括的方法。

可選的,所述方法還包括:

確定所述java程序中實(shí)現(xiàn)所述第一接口的全部實(shí)現(xiàn)類中的每個(gè)實(shí)現(xiàn)類是否有顯式父類;

其中,若所述全部實(shí)現(xiàn)類中的每個(gè)實(shí)現(xiàn)類均沒(méi)有顯式父類,則確定所述第一接口滿足所述預(yù)設(shè)條件。

可選的,所述方法還包括:

在所述全部實(shí)現(xiàn)類中的至少一個(gè)實(shí)現(xiàn)類有顯式父類時(shí),確定所述至少一個(gè)實(shí)現(xiàn)類的顯式父類在是否有函數(shù)簽名沖突的方法;

其中,若所述至少一個(gè)實(shí)現(xiàn)類的顯式父類中沒(méi)有函數(shù)簽名沖突的方法,則確定所述第一接口滿足所述預(yù)設(shè)條件。

可選的,所述第一抽象類包括所述第一接口所包括的全部方法以及所述至少一個(gè)實(shí)現(xiàn)類的顯式父類所包括的全部方法。

根據(jù)本發(fā)明實(shí)施例的第二方面,提供一種創(chuàng)建類的裝置,包括:

第一確定模塊,用于確定java程序中用于實(shí)現(xiàn)多態(tài)的第一接口是否滿足預(yù)設(shè)條件;

創(chuàng)建模塊,用于在所述第一接口滿足所述預(yù)設(shè)條件時(shí),基于所述第一接口創(chuàng)建第一抽象類,其中,所述第一抽象類包括所述第一接口所包括的全部方法;

繼承模塊,用于令所述java程序中實(shí)現(xiàn)所述第一接口的全部實(shí)現(xiàn)類在運(yùn)行所述java程序時(shí)繼承所述第一抽象類包括的方法。

可選的,所述裝置還包括:

第二確定模塊,用于確定所述java程序中實(shí)現(xiàn)所述第一接口的全部實(shí)現(xiàn)類中的每個(gè)實(shí)現(xiàn)類是否有顯式父類;

其中,若所述全部實(shí)現(xiàn)類中的每個(gè)實(shí)現(xiàn)類均沒(méi)有顯式父類,則確定所述第一接口滿足所述預(yù)設(shè)條件。

可選的,所述裝置還包括:

第三確定模塊,用于在所述全部實(shí)現(xiàn)類中的至少一個(gè)實(shí)現(xiàn)類有顯式父類時(shí),確定所述至少一個(gè)實(shí)現(xiàn)類的顯式父類在是否有函數(shù)簽名沖突的方法;

其中,若所述至少一個(gè)實(shí)現(xiàn)類的顯式父類中沒(méi)有函數(shù)簽名沖突的方法,則確定所述第一接口滿足所述預(yù)設(shè)條件。

可選的,所述第一抽象類包括所述第一接口所包括的全部方法以及所述至少一個(gè)實(shí)現(xiàn)類的顯式父類所包括的全部方法。

通過(guò)上述技術(shù)方案,可以在java程序中的用于實(shí)現(xiàn)多態(tài)的第一接口滿足預(yù)設(shè)條件時(shí),創(chuàng)建包含第一接口中全部方法的第一抽象類,那么在運(yùn)行java程序過(guò)程中,實(shí)現(xiàn)第一接口的實(shí)現(xiàn)類無(wú)需再去根據(jù)函數(shù)簽名查找第一接口中的方法,而可以直接以繼承的方式從第一抽象類調(diào)用方法。通過(guò)這樣的方式,由于方法在父類和子類中的偏移量是完全一致的,因此實(shí)現(xiàn)類(子類)在繼承第一抽象類(父類)時(shí),可以直接根據(jù)偏移量進(jìn)行方法調(diào)用,無(wú)需根據(jù)函數(shù)簽名進(jìn)行查找方法,節(jié)省了查找的步驟,提升了程序運(yùn)行的速度,提高了java程序?qū)崿F(xiàn)多態(tài)的效率。

本發(fā)明的其他特征和優(yōu)點(diǎn)將在隨后的具體實(shí)施方式部分予以詳細(xì)說(shuō)明。

附圖說(shuō)明

附圖是用來(lái)提供對(duì)本發(fā)明的進(jìn)一步理解,并且構(gòu)成說(shuō)明書的一部分,與下面的具體實(shí)施方式一起用于解釋本發(fā)明,但并不構(gòu)成對(duì)本發(fā)明的限制。在附圖中:

圖1是根據(jù)一示例性實(shí)施例示出的oracle的jvm實(shí)現(xiàn)多態(tài)時(shí)的方法調(diào)用示意圖。

圖2是根據(jù)一示例性實(shí)施例示出的創(chuàng)建類的方法的流程圖。

圖3是根據(jù)一示例性實(shí)施例示出的創(chuàng)建類的裝置的框圖。

具體實(shí)施方式

以下結(jié)合附圖對(duì)本發(fā)明的具體實(shí)施方式進(jìn)行詳細(xì)說(shuō)明。應(yīng)當(dāng)理解的是,此處所描述的具體實(shí)施方式僅用于說(shuō)明和解釋本發(fā)明,并不用于限制本發(fā)明。

本發(fā)明實(shí)施例中,以oracle的jvm實(shí)現(xiàn)多態(tài)為例,在oraclejvm載入類的時(shí)候,由于父類只有一個(gè),而接口可能有多個(gè),因此子類在內(nèi)存中會(huì)先排列父類的方法,后排列接口中的方法。子類繼承父類后,方法在子類中的位置與父類中的位置是完全一致的,而接口中的方法的位置則無(wú)法確定。當(dāng)然,其他的通過(guò)上述方式實(shí)現(xiàn)多態(tài)的jvm也可以應(yīng)用于本發(fā)明實(shí)施例中的方案。

請(qǐng)參見(jiàn)圖1,圖1是通過(guò)oracle的jvm實(shí)現(xiàn)多態(tài)時(shí)調(diào)用方法的示意圖,父類中包括方法a和方法b,接口1中包括方法c和方法d,接口2中包括方法e和方法f。實(shí)現(xiàn)多態(tài)時(shí),方法a和方法b在父類和子類中的偏移量完全一致,而方法c、方法d、方法e、和方法f在子類和接口中的偏移則沒(méi)有對(duì)應(yīng)關(guān)系,因此在oracle的jvm中利用父類抽象方法進(jìn)行多態(tài)方法調(diào)用時(shí),可以直接根據(jù)偏移進(jìn)行方法調(diào)用,而利用接口進(jìn)行多態(tài)方法調(diào)用時(shí),則需要根據(jù)函數(shù)簽名進(jìn)行一次查找,然后再根據(jù)查找的結(jié)果再進(jìn)行方法調(diào)用。

由于通過(guò)oracle的jvm實(shí)現(xiàn)多態(tài)存在以上的特性,本發(fā)明實(shí)施例將針對(duì)上述特性對(duì)在oracle的jvm上運(yùn)行的用接口實(shí)現(xiàn)多態(tài)的情況進(jìn)行優(yōu)化,以下將對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行說(shuō)明。

圖2是根據(jù)一示例性實(shí)施例示出的一種創(chuàng)建類的方法的流程圖,如圖2所示,該創(chuàng)建類的方法可以應(yīng)用于計(jì)算機(jī)中,包括以下步驟。

步驟s11:確定java程序中用于實(shí)現(xiàn)多態(tài)的第一接口是否滿足預(yù)設(shè)條件。

步驟s12:在第一接口滿足預(yù)設(shè)條件時(shí),基于第一接口創(chuàng)建第一抽象類。

步驟s13:令java程序中實(shí)現(xiàn)第一接口的全部實(shí)現(xiàn)類在運(yùn)行java程序時(shí)繼承第一抽象類包括的方法。

java程序可以是任意的能夠通過(guò)接口實(shí)現(xiàn)多態(tài)的程序,第一接口可以是java程序中包括的任意的用于實(shí)現(xiàn)多態(tài)的接口,在實(shí)際應(yīng)用中,java程序中可能包含多個(gè)用于實(shí)現(xiàn)多態(tài)的接口,第一接口可以是從中隨機(jī)確定的任一接口,或者也可以是編程人員根據(jù)需要從中指定的接口,本發(fā)明實(shí)施例對(duì)此不作限定。

本發(fā)明實(shí)施例中,可以在java程序中的第一接口滿足預(yù)設(shè)條件時(shí),創(chuàng)建對(duì)應(yīng)于第一接口的第一抽象類,創(chuàng)建的第一抽象類可以包括第一接口所包括的全部方法。

在java程序中可能有多個(gè)實(shí)現(xiàn)類都要實(shí)現(xiàn)第一接口,那么在生成了與第一接口對(duì)應(yīng)的第一抽象類之后,由于第一抽象類包括了第一接口所包括的全部方法,因此這些原本要實(shí)現(xiàn)第一接口的實(shí)現(xiàn)類無(wú)需再去調(diào)用第一接口中的方法,只需繼承第一抽象類即可調(diào)用同樣的方法。通過(guò)這樣的方式,節(jié)省了通過(guò)接口調(diào)用方法時(shí)基于函數(shù)簽名查找的步驟,提升了程序運(yùn)行的速度,提高了java程序?qū)崿F(xiàn)多態(tài)的效率。

本發(fā)明實(shí)施例中,對(duì)于如何確定第一接口是否滿足預(yù)設(shè)條件不作限定,以下對(duì)幾種可能的情況進(jìn)行說(shuō)明。

第一種情況:

可選的,可以確定java程序中實(shí)現(xiàn)第一接口的全部實(shí)現(xiàn)類中的每個(gè)實(shí)現(xiàn)類是否有顯式父類,如果全部實(shí)現(xiàn)類中的每個(gè)實(shí)現(xiàn)類均沒(méi)有顯式父類,則可以確定第一接口滿足預(yù)設(shè)條件。

java中,如果一個(gè)類比如用extends關(guān)鍵字聲明非object類的父類,那么可以認(rèn)為這個(gè)類有顯式父類;如果一個(gè)類沒(méi)有顯式聲明父類,則默認(rèn)將object類作為其父類。

可以通過(guò)判斷要實(shí)現(xiàn)第一接口的全部實(shí)現(xiàn)類中的每個(gè)實(shí)現(xiàn)類是否有顯式父類來(lái)確定第一接口是否滿足預(yù)設(shè)條件,如果要實(shí)現(xiàn)第一接口的全部實(shí)現(xiàn)類均沒(méi)有顯式父類,可以認(rèn)為第一接口滿足預(yù)設(shè)條件,進(jìn)而可以創(chuàng)建包含第一接口中全部方法的第一抽象類。

例如,java程序中要實(shí)現(xiàn)接口x(第一接口)的實(shí)現(xiàn)類有三個(gè),分別是實(shí)現(xiàn)類1、實(shí)現(xiàn)類2、和實(shí)現(xiàn)類3,這三個(gè)實(shí)現(xiàn)類均沒(méi)有顯式聲明父類,則默認(rèn)這三個(gè)實(shí)現(xiàn)類都是以object類作為父類,那么可以創(chuàng)建抽象類xx(第一抽象類),抽象類xx將擁有接口x所有的方法,并進(jìn)行默認(rèn)實(shí)現(xiàn)。在運(yùn)行java程序時(shí),實(shí)現(xiàn)類1、實(shí)現(xiàn)類2、和實(shí)現(xiàn)類3將原來(lái)用接口x實(shí)現(xiàn)的多態(tài)方法改為從抽象類xx繼承,提升了實(shí)現(xiàn)多態(tài)的效率,提高了java程序運(yùn)行的速度。

第二種情況:

可選的,如果確定要實(shí)現(xiàn)第一接口的全部實(shí)現(xiàn)類中存在至少一個(gè)實(shí)現(xiàn)類有顯式父類時(shí),那么可以再確定這至少一個(gè)實(shí)現(xiàn)類的顯式父類在是否有函數(shù)簽名沖突的方法,如果至少一個(gè)實(shí)現(xiàn)類的顯式父類中沒(méi)有函數(shù)簽名沖突的方法,也可以確定第一接口滿足預(yù)設(shè)條件。

函數(shù)簽名也就是函數(shù)名稱和參數(shù)類型列表,函數(shù)簽名沖突是指兩個(gè)函數(shù)的簽名一致但返回值不同。例如method1(int)和method1(string)是不同的兩個(gè)函數(shù)簽名,但返回int的method1和返回string的method1認(rèn)為是沖突的兩個(gè)函數(shù)簽名。

可選的,在上述情況下,第一抽象類可以包括第一接口所包括的全部方法以及至少一個(gè)實(shí)現(xiàn)類的顯式父類所包括的全部方法。

例如,java程序中要實(shí)現(xiàn)接口x(第一接口)的實(shí)現(xiàn)類有三個(gè),分別是實(shí)現(xiàn)類1、實(shí)現(xiàn)類2、和實(shí)現(xiàn)類3,其中,實(shí)現(xiàn)類1具有顯式父類a,實(shí)現(xiàn)類2具有顯式父類b,實(shí)現(xiàn)類3沒(méi)有顯式父類,即至少一個(gè)實(shí)現(xiàn)類包括實(shí)現(xiàn)類1和實(shí)現(xiàn)類2這兩個(gè)實(shí)現(xiàn)類。這種情況下,可以繼續(xù)判斷顯式父類a和顯式父類b中是否有函數(shù)簽名沖突的方法,比如確定顯式父類a和顯式父類b中沒(méi)有函數(shù)簽名沖突的方法,那么可以生成抽象類xx(第一抽象類),抽象類xx將擁有接口x的所有方法,同時(shí)抽象類xx還擁有顯式父類a和顯式父類b的所有方法,抽象類xx中,顯式父類a和顯式父類b原來(lái)的方法采用原有實(shí)現(xiàn),其他方法進(jìn)行默認(rèn)實(shí)現(xiàn)。在運(yùn)行java程序時(shí),實(shí)現(xiàn)類1、實(shí)現(xiàn)類2、和實(shí)現(xiàn)類3將原來(lái)用接口x實(shí)現(xiàn)的多態(tài)方法改為從抽象類xx繼承,提升了實(shí)現(xiàn)多態(tài)的效率,提高了java程序運(yùn)行的速度。

請(qǐng)參見(jiàn)圖3,基于同一發(fā)明構(gòu)思,本發(fā)明實(shí)施例提供一種創(chuàng)建類的裝置,該裝置可以包括:

第一確定模塊301,用于確定java程序中用于實(shí)現(xiàn)多態(tài)的第一接口是否滿足預(yù)設(shè)條件;

創(chuàng)建模塊302,用于在第一接口滿足預(yù)設(shè)條件時(shí),基于第一接口創(chuàng)建第一抽象類,其中,第一抽象類包括第一接口所包括的全部方法。

繼承模塊303,用于令java程序中實(shí)現(xiàn)第一接口的全部實(shí)現(xiàn)類在運(yùn)行java程序時(shí)繼承第一抽象類包括的方法。

可選的,該裝置還包括:

第二確定模塊,用于確定java程序中實(shí)現(xiàn)第一接口的全部實(shí)現(xiàn)類中的每個(gè)實(shí)現(xiàn)類是否有顯式父類;

其中,若全部實(shí)現(xiàn)類中的每個(gè)實(shí)現(xiàn)類均沒(méi)有顯式父類,則確定第一接口滿足預(yù)設(shè)條件。

可選的,該裝置還包括:

第三確定模塊,用于在全部實(shí)現(xiàn)類中的至少一個(gè)實(shí)現(xiàn)類有顯式父類時(shí),確定至少一個(gè)實(shí)現(xiàn)類的顯式父類在是否有函數(shù)簽名沖突的方法;

其中,若至少一個(gè)實(shí)現(xiàn)類的顯式父類中沒(méi)有函數(shù)簽名沖突的方法,則確定第一接口滿足預(yù)設(shè)條件。

可選的,第一抽象類包括第一接口所包括的全部方法以及至少一個(gè)實(shí)現(xiàn)類的顯式父類所包括的全部方法。

在本發(fā)明所提供的實(shí)施例中,應(yīng)該理解到,所揭露的裝置和方法,可以通過(guò)其它的方式實(shí)現(xiàn)。例如,以上所描述的裝置實(shí)施例僅僅是示意性的,例如,所述模塊或單元的劃分,僅僅為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式,例如多個(gè)單元或組件可以結(jié)合或者可以集成到另一個(gè)系統(tǒng),或一些特征可以忽略,或不執(zhí)行。

在本申請(qǐng)各個(gè)實(shí)施例中的各功能模塊可以集成在一個(gè)處理單元中,也可以是各個(gè)模塊單獨(dú)物理存在,也可以兩個(gè)或兩個(gè)以上模塊集成在一個(gè)單元中。上述集成的單元既可以采用硬件的形式實(shí)現(xiàn),也可以采用軟件功能單元的形式實(shí)現(xiàn)。

所述集成的單元如果以軟件功能單元的形式實(shí)現(xiàn)并作為獨(dú)立的產(chǎn)品銷售或使用時(shí),可以存儲(chǔ)在一個(gè)計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中?;谶@樣的理解,本申請(qǐng)的技術(shù)方案本質(zhì)上或者說(shuō)對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分或者該技術(shù)方案的全部或部分可以以軟件產(chǎn)品的形式體現(xiàn)出來(lái),該計(jì)算機(jī)軟件產(chǎn)品存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)中,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)或處理器(processor)執(zhí)行本申請(qǐng)各個(gè)實(shí)施例所述方法的全部或部分步驟。而前述的存儲(chǔ)介質(zhì)包括:u盤、移動(dòng)硬盤、rom(read-onlymemory,只讀存儲(chǔ)器)、ram(randomaccessmemory,隨機(jī)存取存儲(chǔ)器)、磁碟或者光盤等各種可以存儲(chǔ)程序代碼的介質(zhì)。

以上所述,以上實(shí)施例僅用以對(duì)本發(fā)明的技術(shù)方案進(jìn)行了詳細(xì)介紹,但以上實(shí)施例的說(shuō)明只是用于幫助理解本發(fā)明的方法及其核心思想,不應(yīng)理解為對(duì)本發(fā)明的限制。本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。

當(dāng)前第1頁(yè)1 2 
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
雷山县| 泰顺县| 巫溪县| 二连浩特市| 霍邱县| 象山县| 宿州市| 托克托县| 信丰县| 万州区| 余庆县| 吴堡县| 沂水县| 宜黄县| 日照市| 郓城县| 福清市| 苏尼特左旗| 岳普湖县| 天柱县| 深水埗区| 焦作市| 亳州市| 尚志市| 闸北区| 台中县| 开阳县| 渝北区| 专栏| 连南| 乌拉特后旗| 华坪县| 孝感市| 寿阳县| 托克逊县| 马关县| 许昌县| 扬中市| 凌源市| 亚东县| 广水市|