本發(fā)明涉及計(jì)算機(jī)程序處理技術(shù),尤其涉及一種反射場(chǎng)景下確定類(lèi)重載方法的方法及裝置。
背景技術(shù):
在Java系統(tǒng)開(kāi)發(fā)中,常常需要使用反射來(lái)調(diào)用對(duì)象,反射就是指計(jì)算機(jī)程序在運(yùn)行時(shí)可以訪問(wèn)、檢測(cè)和修改自身狀態(tài)或行為的一種能力,用比喻來(lái)說(shuō),這種程序能夠“觀察”并且修改自己的行為。
通常來(lái)說(shuō),在反射場(chǎng)景中,當(dāng)接收到業(yè)務(wù)請(qǐng)求,該業(yè)務(wù)請(qǐng)求中包含有入?yún)?實(shí)參)列表,為了找到能夠匹配并執(zhí)行該入?yún)⒘斜碇腥雲(yún)⒌膶?duì)應(yīng)方法,則通過(guò)方法名來(lái)確定唯一與該入?yún)?duì)應(yīng)的方法。但是當(dāng)有多個(gè)同名的重載方法時(shí),特別是在入?yún)⒘斜碇械膮?shù)個(gè)數(shù)相同、且入?yún)⒘斜砼c方法參數(shù)列表具有繼承關(guān)系時(shí),到底應(yīng)該調(diào)用哪個(gè)方法,就變得難于確定,導(dǎo)致該入?yún)⒉荒鼙粓?zhí)行,程序報(bào)錯(cuò)。其中,“重載”是指在同一個(gè)類(lèi)中定義了一個(gè)以上具有相同名稱,但是型構(gòu)不同的方法;也就是說(shuō),函數(shù)或者方法有同樣的名稱,但是參數(shù)列表不相同的情形。“繼承”是面向?qū)ο筌浖夹g(shù)當(dāng)中的一個(gè)概念。如果一個(gè)類(lèi)A繼承自另一個(gè)類(lèi)B,就把這個(gè)A稱為"B的子類(lèi)",而把B稱為"A的父類(lèi)"。繼承可以使得子類(lèi)具有父類(lèi)的各種屬性和方法,而不需要再次編寫(xiě)相同的代碼。在令子類(lèi)繼承父類(lèi)的同時(shí),可以重新定義某些屬性,并重寫(xiě)某些方法,即覆蓋父類(lèi)的原有屬性和方法,使其獲得與父類(lèi)不同的功能。還可以為子類(lèi)追加新的屬性和方法。也就是說(shuō),繼承是在一個(gè)現(xiàn)有類(lèi)型的基礎(chǔ)上,通過(guò)覆蓋、增加新的方法或者重新定義已有方法的方式,產(chǎn)生一個(gè)新的類(lèi)型。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明提供一種反射場(chǎng)景下確定類(lèi)重載方法的方法及裝置,以解決現(xiàn)有技術(shù)中有多個(gè)重載方法,且入?yún)⒘斜砼c方法列表具有繼承關(guān)系時(shí)無(wú)法正確調(diào)用與入?yún)⒘斜砥ヅ涞姆椒ǖ募夹g(shù)問(wèn)題。
一方面,本發(fā)明提供一種反射場(chǎng)景下確定類(lèi)重載方法的方法,包括:
根據(jù)外部入?yún)⑺付ǖ姆椒?,確定類(lèi)內(nèi)所有同名方法;所述同名方法具有與所述外部入?yún)⑺付ǖ姆椒嗤姆椒Q;
若同名方法的個(gè)數(shù)多于一個(gè),獲取所述外部入?yún)⑴c每個(gè)所述同名方法間的繼承關(guān)系;
根據(jù)所述繼承關(guān)系,確定每個(gè)所述同名方法相對(duì)于所述外部入?yún)⒌钠ヅ涠龋?/p>
根據(jù)匹配度結(jié)果,在多個(gè)同名方法中確定所述外部入?yún)⒌念?lèi)重載方法。
本實(shí)施例通過(guò)根據(jù)外部入?yún)⑴c同名方法間的繼承關(guān)系,對(duì)多個(gè)同名方法進(jìn)行匹配度計(jì)算,并根據(jù)計(jì)算結(jié)果確定與入?yún)⑾嗥ヅ淝移ヅ涠雀叩姆椒ㄗ鳛樵撏獠咳雲(yún)?duì)應(yīng)的類(lèi)重載方法,從而解決了現(xiàn)有技術(shù)中當(dāng)存在多個(gè)重載方法,且入?yún)⒘斜砼c方法列表具有繼承關(guān)系時(shí)無(wú)法正確調(diào)用與入?yún)⒘斜砥ヅ涞姆椒ǖ募夹g(shù)問(wèn)題,本發(fā)明實(shí)現(xiàn)了快速、高效為入?yún)⒋_定是否有可調(diào)用的方法,以及為入?yún)⑻峁┛煽啃愿叩念?lèi)重載方法。
作為一種可實(shí)現(xiàn)的方式,所述若同名方法的個(gè)數(shù)多于一個(gè),獲取所述外部入?yún)⑴c每個(gè)所述同名方法間的繼承關(guān)系,包括:
將每個(gè)所述同名方法內(nèi)的每個(gè)形參與所述外部入?yún)?nèi)的每個(gè)實(shí)參進(jìn)行比較,確定所述外部入?yún)⑴c每個(gè)所述同名方法間的繼承關(guān)系。
作為一種可實(shí)現(xiàn)的方式,所述將每個(gè)所述同名方法內(nèi)的每個(gè)形參與所述外部入?yún)?nèi)的每個(gè)實(shí)參進(jìn)行比較,確定所述外部入?yún)⑴c每個(gè)所述同名方法間的繼承關(guān)系,包括:
根據(jù)所述同名方法內(nèi)每個(gè)形參的位置先后順序,確定所述外部參數(shù)中的每個(gè)實(shí)參與對(duì)應(yīng)位置處的同名方法中的每個(gè)形參之間的繼承層數(shù);
根據(jù)所述繼承層數(shù),確定所述外部入?yún)⑴c每個(gè)所述同名方法間的繼承關(guān)系。
作為一種可實(shí)現(xiàn)的方式,所述根據(jù)所述繼承層數(shù),確定所述外部入?yún)⑴c每個(gè)所述同名方法間的繼承關(guān)系,包括:
若所述外部參數(shù)中的至少一個(gè)實(shí)參與所述同名方法對(duì)應(yīng)位置處的形參之間不存在繼承層數(shù),確定所述外部入?yún)⑴c所述同名方法之間不存在繼承關(guān)系;
若所述外部參數(shù)中的每個(gè)實(shí)參與所述同名方法對(duì)應(yīng)位置處的每個(gè)形參之間存在繼承層數(shù),確定所述外部入?yún)⑴c所述同名方法之間存在繼承關(guān)系。
作為一種可實(shí)現(xiàn)的方式,所述根據(jù)所述繼承關(guān)系,確定每個(gè)所述同名方法相對(duì)于所述外部入?yún)⒌钠ヅ涠龋ǎ?/p>
根據(jù)所述繼承關(guān)系,確定每個(gè)同名方法的方法向量;
確定每個(gè)所述方法向量的模值,根據(jù)所述模值的大小確定每個(gè)所述同名方法相對(duì)于所述外部入?yún)⒌钠ヅ涠取?/p>
作為一種可實(shí)現(xiàn)的方式,所述根據(jù)所述繼承關(guān)系,確定每個(gè)同名方法的方法向量,包括:
根據(jù)每個(gè)所述同名方法內(nèi)的形參的參數(shù)個(gè)數(shù),確定每個(gè)同名方法的方法向量的向量維數(shù);
根據(jù)每個(gè)位置相互對(duì)應(yīng)的實(shí)參與形參之間的繼承層數(shù),確定每個(gè)方法向量中每一維向量元素的元素值。
作為一種可實(shí)現(xiàn)的方式,若位置相互對(duì)應(yīng)的實(shí)參與形參之間沒(méi)有繼承關(guān)系,則確定所述同名方法不是所述外部入?yún)⒌念?lèi)重載方法。
作為一種可實(shí)現(xiàn)的方式,所述根據(jù)每個(gè)位置相互對(duì)應(yīng)的實(shí)參與形參之間的繼承層數(shù),確定每個(gè)方法向量中每一維向量元素的元素值,包括:
若所述位置相互對(duì)應(yīng)的實(shí)參與形參之間沒(méi)有繼承關(guān)系,確定所述實(shí)參與形參之間的繼承層數(shù)為一預(yù)設(shè)無(wú)效數(shù)值;
以所述預(yù)設(shè)無(wú)效數(shù)值作為與所述形參對(duì)應(yīng)維的向量元素的元素值;
相應(yīng)的,所述根據(jù)所述繼承關(guān)系,確定每個(gè)所述同名方法相對(duì)于所述外部入?yún)⒌钠ヅ涠?,包括?/p>
根據(jù)所述預(yù)設(shè)無(wú)效數(shù)值,確定所述方法向量的模值為極大值;
相應(yīng)的,所述根據(jù)匹配度結(jié)果,在多個(gè)同名方法中確定所述外部入?yún)⒌念?lèi)重載方法,包括:
根據(jù)所述極大值的模值,確定具有所述極大值的同名方法不是所述外部入?yún)⒌念?lèi)重載方法。
作為一種可實(shí)現(xiàn)的方式,所述根據(jù)每個(gè)位置相互對(duì)應(yīng)的實(shí)參與形參之間的繼承層數(shù),確定每個(gè)方法向量中每一維向量元素的元素值,包括:
若所述位置相互對(duì)應(yīng)的實(shí)參與形參之間存在繼承關(guān)系,確定所述實(shí)參與形參之間的繼承層數(shù);
以所述繼承層數(shù)的數(shù)值作為與所述形參對(duì)應(yīng)維的向量元素的元素值。
作為一種可實(shí)現(xiàn)的方式,所述根據(jù)匹配度結(jié)果,在多個(gè)同名方法中確定所述外部入?yún)⒌念?lèi)重載方法,包括:
根據(jù)模值的大小對(duì)同名方法進(jìn)行排序,選取具有最小模值的同名方法作為所述外部入?yún)⒌念?lèi)重載方法。
本實(shí)施例通過(guò)確定外部入?yún)⑴c同名方法間的繼承關(guān)系,并將該繼承關(guān)系映射到對(duì)向量模值的量化計(jì)算中,進(jìn)而以模值大小衡量外部入?yún)⑴c同名方法之間的匹配度,以為外部入?yún)⑻峁?zhǔn)確、可靠的類(lèi)重載方法;從而快速、高效地對(duì)是否存在可調(diào)用方法進(jìn)行判斷,以為入?yún)⑻峁┳顬槠ヅ涞念?lèi)重載方法。
作為一種可實(shí)現(xiàn)的方式,所述獲取所述外部入?yún)⑴c每個(gè)所述同名方法間的繼承關(guān)系之前,還包括:
根據(jù)所述外部入?yún)⒌膮?shù)屬性對(duì)多個(gè)所述同名方法進(jìn)行篩選;所述參數(shù)屬性包括以下至少一項(xiàng):外部入?yún)⒌膮?shù)個(gè)數(shù)、外部入?yún)⒌臄?shù)據(jù)類(lèi)型。
作為一種可實(shí)現(xiàn)的方式,所述根據(jù)所述外部入?yún)⒌膮?shù)屬性對(duì)多個(gè)所述同名方法進(jìn)行篩選,包括:
根據(jù)所述外部入?yún)⒌膮?shù)個(gè)數(shù),刪除與所述外部入?yún)⒌膮?shù)個(gè)數(shù)不相等的同名方法;
和/或,
根據(jù)所述外部入?yún)⒌臄?shù)據(jù)類(lèi)型,刪除與所述外部入?yún)⒌臄?shù)據(jù)類(lèi)型不相符的同名方法。
本實(shí)施例通過(guò)根據(jù)入?yún)⒌膮?shù)個(gè)數(shù)、數(shù)據(jù)類(lèi)型等對(duì)同名方法進(jìn)行篩選,以快速、高效地定位出待進(jìn)行入?yún)⑵ヅ涠扔?jì)算的同名方法。從而提高入?yún)⑴c類(lèi)重載方法的匹配效率。
作為一種可實(shí)現(xiàn)的方式,所述方法還包括:
若同名方法的個(gè)數(shù)為一個(gè),則判斷所述外部入?yún)?nèi)的每個(gè)參數(shù)與所述同名方法中的每個(gè)參數(shù)是否存在繼承關(guān)系;
若是,則確認(rèn)所述同名方法為所述外部入?yún)⒌念?lèi)重載方法;
若不是,則返回?zé)o可用調(diào)用方法的提示信息。
另一方面,本發(fā)明提供一種反射場(chǎng)景下確定類(lèi)重載方法的裝置,包括:
確定模塊,用于根據(jù)外部入?yún)⑺付ǖ姆椒?,確定類(lèi)內(nèi)所有同名方法;所述同名方法具有與所述外部入?yún)⑺付ǖ姆椒嗤姆椒Q;
獲取模塊,用于當(dāng)同名方法的個(gè)數(shù)多于一個(gè)的情況下,獲取所述外部入?yún)⑴c每個(gè)所述同名方法間的繼承關(guān)系;
所述確定模塊,還用于根據(jù)所述繼承關(guān)系,確定每個(gè)所述同名方法相對(duì)于所述外部入?yún)⒌钠ヅ涠龋桓鶕?jù)匹配度結(jié)果,在多個(gè)同名方法中確定所述外部入?yún)⒌念?lèi)重載方法。
作為一種可實(shí)現(xiàn)的方式,所述獲取模塊包括:
比較子模塊,用于將每個(gè)所述同名方法內(nèi)的每個(gè)形參與所述外部入?yún)?nèi)的每個(gè)實(shí)參進(jìn)行比較;
確定子模塊,用于確定所述外部入?yún)⑴c每個(gè)所述同名方法間的繼承關(guān)系。
作為一種可實(shí)現(xiàn)的方式,所述確定子模塊包括:
繼承層數(shù)確定子模塊,用于根據(jù)所述同名方法內(nèi)每個(gè)形參的位置先后順序,確定所述外部參數(shù)中的每個(gè)實(shí)參與對(duì)應(yīng)位置處的同名方法中的每個(gè)形參之間的繼承層數(shù);
繼承關(guān)系確定子模塊,用于根據(jù)所述繼承層數(shù),確定所述外部入?yún)⑴c每個(gè)所述同名方法間的繼承關(guān)系。
作為一種可實(shí)現(xiàn)的方式,所述繼承關(guān)系確定子模塊,具體用于當(dāng)所述外部參數(shù)中的至少一個(gè)實(shí)參與所述同名方法對(duì)應(yīng)位置處的形參之間不存在繼承層數(shù)的情況下,確定所述外部入?yún)⑴c所述同名方法之間不存在繼承關(guān)系;當(dāng)所述外部參數(shù)中的每個(gè)實(shí)參與所述同名方法對(duì)應(yīng)位置處的每個(gè)形參之間存在繼承層數(shù)時(shí),確定所述外部入?yún)⑴c所述同名方法之間存在繼承關(guān)系。
作為一種可實(shí)現(xiàn)的方式,所述確定模塊,包括:
向量確定子模塊,用于根據(jù)所述繼承關(guān)系,確定每個(gè)同名方法的方法向量;
模值確定子模塊,用于確定每個(gè)所述方法向量的模值,根據(jù)所述模值的大小確定每個(gè)所述同名方法相對(duì)于所述外部入?yún)⒌钠ヅ涠取?/p>
作為一種可實(shí)現(xiàn)的方式,所述向量確定子模塊,包括:
維數(shù)確定子模塊,用于根據(jù)每個(gè)所述同名方法內(nèi)的形參的參數(shù)個(gè)數(shù),確定每個(gè)同名方法的方法向量的向量維數(shù);
元素值確定子模塊,用于根據(jù)每個(gè)位置相互對(duì)應(yīng)的實(shí)參與形參之間的繼承層數(shù),確定每個(gè)方法向量中每一維向量元素的元素值。
作為一種可實(shí)現(xiàn)的方式,所述確定模塊還用于,
當(dāng)位置相互對(duì)應(yīng)的實(shí)參與形參之間沒(méi)有繼承關(guān)系的情況下,確定所述同名方法不是所述外部入?yún)⒌念?lèi)重載方法。
作為一種可實(shí)現(xiàn)的方式,所述元素值確定子模塊,具體用于當(dāng)所述位置相互對(duì)應(yīng)的實(shí)參與形參之間沒(méi)有繼承關(guān)系的情況下,確定所述實(shí)參與形參之間的繼承層數(shù)為一預(yù)設(shè)無(wú)效數(shù)值;以所述預(yù)設(shè)無(wú)效數(shù)值作為與所述形參對(duì)應(yīng)維的向量元素的元素值;
所述確定模塊,還包括:
極大值確定子模塊,用于根據(jù)所述預(yù)設(shè)無(wú)效數(shù)值,確定所述方法向量的模值為極大值;根據(jù)所述極大值的模值,確定具有所述極大值的同名方法不是所述外部入?yún)⒌念?lèi)重載方法。
作為一種可實(shí)現(xiàn)的方式,所述元素值確定子模塊,具體用于當(dāng)所述位置相互對(duì)應(yīng)的實(shí)參與形參之間存在繼承關(guān)系的情況下,確定所述實(shí)參與形參之間的繼承層數(shù);以所述繼承層數(shù)的數(shù)值作為與所述形參對(duì)應(yīng)維的向量元素的元素值。
作為一種可實(shí)現(xiàn)的方式,所述確定模塊,還包括:
方法確定子模塊,用于根據(jù)模值的大小對(duì)同名方法進(jìn)行排序,選取具有最小模值的同名方法作為所述外部入?yún)⒌念?lèi)重載方法。
作為一種可實(shí)現(xiàn)的方式,所述裝置還包括:
篩選模塊,用于根據(jù)所述外部入?yún)⒌膮?shù)屬性對(duì)多個(gè)所述同名方法進(jìn)行篩選;所述參數(shù)屬性包括以下至少一項(xiàng):外部入?yún)⒌膮?shù)個(gè)數(shù)、外部入?yún)⒌臄?shù)據(jù)類(lèi)型。
作為一種可實(shí)現(xiàn)的方式,所述篩選模塊包括:
個(gè)數(shù)篩選子模塊,用于根據(jù)所述外部入?yún)⒌膮?shù)個(gè)數(shù),刪除與所述外部入?yún)⒌膮?shù)個(gè)數(shù)不相等的同名方法;
和/或,
類(lèi)型篩選子模塊,用于根據(jù)所述外部入?yún)⒌臄?shù)據(jù)類(lèi)型,刪除與所述外部入?yún)⒌臄?shù)據(jù)類(lèi)型不相符的同名方法。
作為一種可實(shí)現(xiàn)的方式,所述裝置還包括:
判斷模塊,用于當(dāng)同名方法的個(gè)數(shù)為一個(gè)的情況下,判斷所述外部入?yún)?nèi)的每個(gè)參數(shù)與所述同名方法中的每個(gè)參數(shù)是否存在繼承關(guān)系;若是,則確認(rèn)所述同名方法為所述外部入?yún)⒌念?lèi)重載方法;若不是,則返回?zé)o可用調(diào)用方法的提示信息。
本發(fā)明通過(guò)根據(jù)外部入?yún)⑴c同名方法間的繼承關(guān)系,對(duì)多個(gè)同名方法進(jìn)行匹配度計(jì)算,并根據(jù)計(jì)算結(jié)果確定與入?yún)⑾嗥ヅ淝移ヅ涠雀叩姆椒ㄗ鳛樵撏獠咳雲(yún)?duì)應(yīng)的類(lèi)重載方法,從而解決了現(xiàn)有技術(shù)中當(dāng)存在多個(gè)重載方法,且入?yún)⒘斜砼c方法列表具有繼承關(guān)系時(shí)無(wú)法正確調(diào)用與入?yún)⒘斜砥ヅ涞姆椒ǖ募夹g(shù)問(wèn)題,本發(fā)明實(shí)現(xiàn)了快速、高效為入?yún)⒋_定是否有可調(diào)用的方法,以及為入?yún)⑻峁┛煽啃愿叩念?lèi)重載方法。
附圖說(shuō)明
為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作一簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明一實(shí)施例提供的反射場(chǎng)景下確定類(lèi)重載方法的方法的流程示意圖;
圖2為本發(fā)明一實(shí)施例提供的反射場(chǎng)景下確定類(lèi)重載方法的方法的流程示意圖;
圖3為本發(fā)明一實(shí)施例提供的反射場(chǎng)景下確定類(lèi)重載方法的方法的流程示意圖;
圖4為本發(fā)明一實(shí)施例提供的反射場(chǎng)景下確定類(lèi)重載方法的裝置的結(jié)構(gòu)示意圖;
圖5為本發(fā)明一實(shí)施例提供的反射場(chǎng)景下確定類(lèi)重載方法的裝置的結(jié)構(gòu)示意圖。
具體實(shí)施方式
這里將詳細(xì)地對(duì)示例性實(shí)施例進(jìn)行說(shuō)明,其示例表示在附圖中。下面的描述涉及附圖時(shí),除非另有表示,不同附圖中的相同數(shù)字表示相同或相似的要素。以下示例性實(shí)施例中所描述的實(shí)施方式并不代表與本發(fā)明相一致的所有實(shí)施方式。相反,它們僅是與如所附權(quán)利要求書(shū)中所詳述的、本發(fā)明的一些方面相一致的裝置和方法的例子。
在本發(fā)明實(shí)施例中使用的術(shù)語(yǔ)是僅僅出于描述特定實(shí)施例的目的,而非旨在限制本發(fā)明。在本發(fā)明實(shí)施例和所附權(quán)利要求書(shū)中所使用的單數(shù)形式的“一種”、“所述”和“該”也旨在包括多數(shù)形式,除非上下文清楚地表示其他含義。
應(yīng)當(dāng)理解,本文中使用的術(shù)語(yǔ)“和/或”僅僅是一種描述關(guān)聯(lián)對(duì)象的關(guān)聯(lián)關(guān)系,表示可以存在三種關(guān)系,例如,A和/或B,可以表示:?jiǎn)为?dú)存在A,同時(shí)存在A和B,單獨(dú)存在B這三種情況。另外,本文中字符“/”,一般表示前后關(guān)聯(lián)對(duì)象是一種“或”的關(guān)系。
應(yīng)當(dāng)理解,盡管在本發(fā)明實(shí)施例中可能采用術(shù)語(yǔ)第一、第二、第三等來(lái)描述XXX,但這些XXX不應(yīng)限于這些術(shù)語(yǔ)。這些術(shù)語(yǔ)僅用來(lái)將XXX彼此區(qū)分開(kāi)。例如,在不脫離本發(fā)明實(shí)施例范圍的情況下,第一XXX也可以被稱為第二XXX,類(lèi)似地,第二XXX也可以被稱為第一XXX。
取決于語(yǔ)境,如在此所使用的詞語(yǔ)“如果”、“若”可以被解釋成為“在……時(shí)”或“當(dāng)……時(shí)”或“響應(yīng)于確定”或“響應(yīng)于檢測(cè)”。類(lèi)似地,取決于語(yǔ)境,短語(yǔ)“如果確定”或“如果檢測(cè)(陳述的條件或事件)”可以被解釋成為“當(dāng)確定時(shí)”或“響應(yīng)于確定”或“當(dāng)檢測(cè)(陳述的條件或事件)時(shí)”或“響應(yīng)于檢測(cè)(陳述的條件或事件)”。
還需要說(shuō)明的是,術(shù)語(yǔ)“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的商品或者系統(tǒng)不僅包括那些要素,而且還包括沒(méi)有明確列出的其他要素,或者是還包括為這種商品或者系統(tǒng)所固有的要素。在沒(méi)有更多限制的情況下,由語(yǔ)句“包括一個(gè)……”限定的要素,并不排除在包括所述要素的商品或者系統(tǒng)中還存在另外的相同要素。
圖1為本發(fā)明一實(shí)施例提供的反射場(chǎng)景下確定類(lèi)重載方法的方法的流程示意圖。本實(shí)施例的執(zhí)行主體可以為反射場(chǎng)景下確定類(lèi)重載方法的裝置,該裝置可以通過(guò)硬件實(shí)現(xiàn),也可以通過(guò)硬件執(zhí)行相應(yīng)的軟件實(shí)現(xiàn)。該裝置可以被實(shí)現(xiàn)在任何具備處理器的終端設(shè)備中。該終端設(shè)備例如可以是移動(dòng)終端,該移動(dòng)終端包括平板、手機(jī);可以是云端的服務(wù)器設(shè)備等。如圖1所示,該方法的具體流程包括:
步驟101、根據(jù)外部入?yún)⑺付ǖ姆椒?,確定類(lèi)內(nèi)所有同名方法。
其中,同名方法具有與外部入?yún)⑺付ǖ姆椒嗤姆椒Q。
外部入?yún)⒁步凶鰧?shí)參,其為程序接口處由外部輸入供程序運(yùn)行的實(shí)際參數(shù);是在調(diào)用方法或函數(shù)時(shí),傳遞給被調(diào)用函數(shù)的值。入?yún)⒖梢允浅A?、變量、表達(dá)式、函數(shù)等,無(wú)論入?yún)⑹呛畏N類(lèi)型的量,在進(jìn)行函數(shù)調(diào)用時(shí),它們都必須具有確定的值,以便把這些值傳送給被調(diào)用方法中所包含的形參。因此通常來(lái)說(shuō),入?yún)⒍碱A(yù)先用賦值,輸入等辦法獲得確定值。
類(lèi)是對(duì)現(xiàn)實(shí)生活中一類(lèi)具有共同特征的事物的抽象。如果一個(gè)程序里提供的類(lèi)型與應(yīng)用中的概念有直接的對(duì)應(yīng),這個(gè)程序就會(huì)更容易理解,也更容易修改。類(lèi)的內(nèi)部封裝有方法,其是對(duì)某種對(duì)象的定義,具有行為(behavior),它描述一個(gè)對(duì)象能夠做什么以及做的方法(method)。類(lèi)中可以包含有層級(jí)結(jié)構(gòu)的子類(lèi),而類(lèi)間方法的調(diào)用以及同級(jí)類(lèi)中存在著繼承與重載的概念。
“繼承”是面向?qū)ο筌浖夹g(shù)當(dāng)中的一個(gè)概念。如果一個(gè)類(lèi)A繼承自另一個(gè)類(lèi)B,就把這個(gè)A稱為"B的子類(lèi)",而把B稱為"A的父類(lèi)"。繼承可以使得子類(lèi)具有父類(lèi)的各種屬性和方法,而不需要再次編寫(xiě)相同的代碼。在令子類(lèi)繼承父類(lèi)的同時(shí),可以重新定義某些屬性,并重寫(xiě)某些方法,即覆蓋父類(lèi)的原有屬性和方法,使其獲得與父類(lèi)不同的功能。還可以為子類(lèi)追加新的屬性和方法。也就是說(shuō),繼承是在一個(gè)現(xiàn)有類(lèi)型的基礎(chǔ)上,通過(guò)覆蓋、增加新的方法或者重新定義已有方法的方式,產(chǎn)生一個(gè)新的類(lèi)型。
“重載”是指在同一個(gè)類(lèi)中定義了一個(gè)以上具有相同名稱,但是型構(gòu)不同的方法;也就是說(shuō),函數(shù)或者方法有同樣的名稱,但是參數(shù)列表不相同的情形。繼承是指類(lèi)之間關(guān)系;有繼承關(guān)系的兩個(gè)類(lèi),子類(lèi)重寫(xiě)了一個(gè)與父類(lèi)完全相同的方法,叫覆蓋;同一個(gè)類(lèi)中的有多個(gè)同名方法,叫重載。例如,子類(lèi)B繼承自父類(lèi)A;子類(lèi)B中包含有方法1(a1,a2),該方法覆蓋了父類(lèi)A中的方法1(a1,a2);子類(lèi)B方法1(a1,a2)和子類(lèi)B方法1(a1,a2,a3)是重載關(guān)系。
可見(jiàn),由于類(lèi)內(nèi)所存在的眾多子類(lèi),以及各子類(lèi)間的繼承關(guān)系,致使類(lèi)內(nèi)存在多個(gè)同名方法,因此可以根據(jù)入?yún)⑺付ǖ姆椒?,先確定類(lèi)內(nèi)可能被調(diào)用的用于執(zhí)行該入?yún)⒌乃蟹椒ā?/p>
步驟102、若同名方法的個(gè)數(shù)多于一個(gè),獲取外部入?yún)⑴c每個(gè)同名方法間的繼承關(guān)系。
步驟103、根據(jù)繼承關(guān)系,確定每個(gè)同名方法相對(duì)于外部入?yún)⒌钠ヅ涠取?/p>
例如,在某個(gè)類(lèi)中,存在兩個(gè)同名方法Class.method(Parent p1,Child c2,Parent p3),Class.method(Child c1,Parent p2,Child c3);其中,child與parent具有繼承關(guān)系;程序調(diào)用時(shí),假設(shè)外部入?yún)⑹荂lass.method(Child,Child,Child),則上述兩個(gè)同名方法與外部入?yún)⒌腃lass.method(Child,Child,Child)之間均存在著繼承關(guān)系,由于此時(shí)參數(shù)個(gè)數(shù)(3個(gè))相同,假設(shè)數(shù)據(jù)類(lèi)型等參數(shù)屬性也均相同,則程序很難確定使用哪個(gè)方法,就算是非反射調(diào)用,在編譯時(shí)也確認(rèn)不了,通常還會(huì)導(dǎo)致編譯不通過(guò),程序執(zhí)行出錯(cuò)等問(wèn)題。本發(fā)明就是在存在多個(gè)同名方法,程序難以辨識(shí)時(shí),給予入?yún)⒖焖偾矣行У淖罴逊椒ㄕ{(diào)用的方法。具體可以通過(guò)對(duì)同名方法Class.method(Parent p1,Child c2,Parent p3)與Class.method(Child c1,Parent p2,Child c3)與外部入?yún)lass.method(Child,Child,Child)之間的方法匹配度進(jìn)行評(píng)估,以為外部入?yún)⑦x擇最有利于程序執(zhí)行的方法。
步驟104、根據(jù)匹配度結(jié)果,在同名方法中確定該外部入?yún)⒌念?lèi)重載方法。
本實(shí)施例通過(guò)根據(jù)外部入?yún)⑴c同名方法間的繼承關(guān)系,確定每個(gè)同名方法相對(duì)于外部入?yún)⒌钠ヅ涠?,以根?jù)匹配度結(jié)果為入?yún)⑦x擇最為匹配的類(lèi)重載方法,解決了現(xiàn)有技術(shù)中當(dāng)存在多個(gè)重載方法,且入?yún)⒘斜砼c方法列表具有繼承關(guān)系時(shí)無(wú)法正確調(diào)用與入?yún)⒘斜砥ヅ涞姆椒ǖ募夹g(shù)問(wèn)題,實(shí)現(xiàn)了快速、高效為入?yún)⒋_定是否有可調(diào)用的方法,以及為入?yún)⑻峁┛煽啃愿叩念?lèi)重載方法。
下面采用詳細(xì)的實(shí)施例,對(duì)本發(fā)明的反射場(chǎng)景下確定類(lèi)重載方法的方法的過(guò)程進(jìn)行詳細(xì)說(shuō)明。下面這幾個(gè)具體的實(shí)施例可以相互結(jié)合,對(duì)于相同或相似的概念或過(guò)程在某些實(shí)施例不再贅述。
圖2為本發(fā)明一實(shí)施例提供的反射場(chǎng)景下確定類(lèi)重載方法的方法的流程示意圖。本實(shí)施例采用一個(gè)具體的實(shí)施例,對(duì)上述實(shí)施例中當(dāng)判斷同名方法的個(gè)數(shù)多于一個(gè)時(shí),如何根據(jù)外部入?yún)⑴c同名方法間的繼承關(guān)系,確定同名方法相對(duì)于外部入?yún)⒌钠ヅ涠?,并進(jìn)行類(lèi)重載方法選定的步驟進(jìn)行詳細(xì)說(shuō)明。具體步驟包括:
步驟201、將每個(gè)同名方法內(nèi)的每個(gè)形參與外部入?yún)?nèi)的每個(gè)實(shí)參進(jìn)行比較,確定外部入?yún)⑴c每個(gè)同名方法間的繼承關(guān)系。
具體的,根據(jù)同名方法內(nèi)每個(gè)形參的位置先后順序,將每個(gè)形參與外部入?yún)?nèi)的每個(gè)實(shí)參進(jìn)行比較,確定外部參數(shù)中的每個(gè)實(shí)參與對(duì)應(yīng)位置處的同名方法中的每個(gè)形參之間的繼承層數(shù),根據(jù)該繼承層數(shù),確定外部入?yún)⑴c每個(gè)同名方法間的繼承關(guān)系。若外部參數(shù)中的至少一個(gè)實(shí)參與同名方法對(duì)應(yīng)位置處的形參之間不存在繼承層數(shù),確定外部入?yún)⑴c同名方法之間不存在繼承關(guān)系;若外部參數(shù)中的每個(gè)實(shí)參與同名方法對(duì)應(yīng)位置處的每個(gè)形參之間存在繼承層數(shù),確定外部入?yún)⑴c同名方法之間存在繼承關(guān)系。根據(jù)上述方法,確定出若入?yún)⒅械哪骋粎?shù)與同名方法中的對(duì)應(yīng)參數(shù)之間存在繼承關(guān)系,則需要統(tǒng)計(jì)兩個(gè)參數(shù)之間的繼承層數(shù);若入?yún)⒅械哪骋粎?shù)與同名方法中的對(duì)應(yīng)參數(shù)之間沒(méi)有繼承關(guān)系,則確定兩個(gè)參數(shù)之間的繼承層數(shù)為一預(yù)設(shè)無(wú)效數(shù)值;只要同名方法中的任一形參與外部入?yún)⒅g存在一預(yù)設(shè)無(wú)效數(shù)值,無(wú)論其它形參是否與入?yún)⒋嬖诶^承關(guān)系,都判斷該具有預(yù)設(shè)無(wú)效數(shù)值的同名方法不是與外部入?yún)⑾嗥ヅ涞姆椒?。該判斷過(guò)程采用計(jì)算機(jī)程序執(zhí)行時(shí),可采用以下示例設(shè)置,將預(yù)設(shè)無(wú)效數(shù)值設(shè)置為一預(yù)設(shè)負(fù)數(shù)數(shù)值,當(dāng)程序判斷出現(xiàn)負(fù)數(shù)數(shù)值時(shí),程序返回預(yù)設(shè)極大值,以確定具有極大值的同名方法不是該外部入?yún)⑺ヅ涞念?lèi)重載方法。通過(guò)將沒(méi)有繼承關(guān)系的匹配度數(shù)值確定為極大值以便于計(jì)算機(jī)快速識(shí)別與判斷,以排除該具有極大值的同名方法。
步驟202、根據(jù)繼承關(guān)系,確定每個(gè)同名方法的方法向量。
具體的,根據(jù)每個(gè)同名方法內(nèi)的形參的參數(shù)個(gè)數(shù),確定每個(gè)同名方法的方法向量的向量維數(shù);根據(jù)每個(gè)位置相互對(duì)應(yīng)的實(shí)參與形參之間的繼承層數(shù),確定每個(gè)方法向量中每一維向量元素的元素值。若位置相互對(duì)應(yīng)的實(shí)參與形參之間沒(méi)有繼承關(guān)系,則可以確定實(shí)參與形參之間的繼承層數(shù)為一預(yù)設(shè)無(wú)效數(shù)值;并以該預(yù)設(shè)無(wú)效數(shù)值作為與形參對(duì)應(yīng)維的向量元素的元素值;且當(dāng)位置相互對(duì)應(yīng)的實(shí)參與形參之間沒(méi)有繼承關(guān)系的情況下,可以確定該同名方法不是外部入?yún)⒌念?lèi)重載方法。若位置相互對(duì)應(yīng)的實(shí)參與形參之間存在繼承關(guān)系,確定實(shí)參與形參之間的繼承層數(shù);并以該繼承層數(shù)的數(shù)值作為與形參對(duì)應(yīng)維的向量元素的元素值。也就是說(shuō),向量中每個(gè)元素的數(shù)值大小以繼承關(guān)系的層數(shù)值表示。舉例來(lái)說(shuō),向量的維數(shù)與同名方法的形參參數(shù)個(gè)數(shù)相等,每一維的數(shù)值由對(duì)應(yīng)參數(shù)間的繼承關(guān)系的層數(shù)來(lái)確定,如果繼承層數(shù)越多,元素?cái)?shù)值越大;如果無(wú)繼承關(guān)系,則數(shù)值可以定為一預(yù)設(shè)無(wú)效數(shù)值。例如,類(lèi)內(nèi)存在同名方法Class.method(Parent p1,Child c2,Parent p3),Class.method(Child c1,Parent p2,Child c3);則根據(jù)同名方法Class.method(Parent p1,Child c2,Parent p3)確定出向量X{x1,x2,x3},根據(jù)同名方法Class.method(Child c1,Parent p2,Child c3)確定出向量Y{y1,y2,y3},假設(shè)外部入?yún)镃lass.method(Child,Child,Child),且Child與Parent之間的繼承關(guān)系假設(shè)為一層,則x1,x2,x3的數(shù)值為(1,0,1),y1,y2,y3的數(shù)值為(0,1,0);入?yún)⒚咳∫淮胃割?lèi)層則元素?cái)?shù)值增加1,若繼承層級(jí)為同層則元素?cái)?shù)值為0,若沒(méi)有繼承關(guān)系,則取一預(yù)設(shè)無(wú)效值(如,負(fù)數(shù)值)。
步驟203、確定每個(gè)方法向量的模值,根據(jù)模值大小確定每個(gè)同名方法相對(duì)于外部入?yún)⒌钠ヅ涠取?/p>
具體的,每個(gè)方法向量的模值可抽象地代表同名方法與入?yún)㈤g的調(diào)用距離關(guān)系,距離越近,則調(diào)用越便捷,有效節(jié)省調(diào)用時(shí)間、步驟等。通過(guò)對(duì)方法向量的模值進(jìn)行計(jì)算可以獲取到該距離關(guān)系,進(jìn)而根據(jù)模值對(duì)同名方法與入?yún)⒌钠ヅ涠冗M(jìn)行判斷。模值的計(jì)算方法可以采用現(xiàn)有技術(shù)中向量模值的通用計(jì)算方法,對(duì)于計(jì)算機(jī)計(jì)算來(lái)說(shuō),為了減少計(jì)算量,可以不進(jìn)行開(kāi)方運(yùn)算,僅計(jì)算向量中每個(gè)元素的平方和即可,以節(jié)省計(jì)算資源,提高計(jì)算效率。
步驟204、根據(jù)匹配度結(jié)果,在多個(gè)同名方法中確定外部入?yún)⒌念?lèi)重載方法。
具體的,以模值作為匹配度的衡量標(biāo)準(zhǔn),可以根據(jù)模值的大小對(duì)同名方法進(jìn)行排序,選取具有最小模值的同名方法作為外部入?yún)⒌念?lèi)重載方法。
進(jìn)一步地,在步驟201、將每個(gè)同名方法內(nèi)的每個(gè)形參與外部入?yún)?nèi)的每個(gè)實(shí)參進(jìn)行比較,確定外部入?yún)⑴c每個(gè)同名方法間的繼承關(guān)系之前,還可以包括對(duì)同名方法進(jìn)行快速初步篩選的過(guò)程。具體的,若同名方法的個(gè)數(shù)多于一個(gè),則根據(jù)外部入?yún)⒌膮?shù)屬性對(duì)多個(gè)同名方法進(jìn)行篩選。參數(shù)屬性可以是入?yún)⒌膮?shù)個(gè)數(shù),入?yún)⒌臄?shù)據(jù)類(lèi)型(常量、變量、表達(dá)式、函數(shù)等)等。在一個(gè)實(shí)施例中可以根據(jù)外部入?yún)⒌膮?shù)個(gè)數(shù),刪除與外部入?yún)⒌膮?shù)個(gè)數(shù)不相等的同名方法。在另一個(gè)實(shí)施例中可以根據(jù)外部入?yún)⒌臄?shù)據(jù)類(lèi)型,刪除與外部入?yún)⒌臄?shù)據(jù)類(lèi)型不相符的同名方法。當(dāng)然在采用參數(shù)個(gè)數(shù)篩選的基礎(chǔ)上,還可以采用數(shù)據(jù)類(lèi)型進(jìn)一步對(duì)同名方法進(jìn)行篩選,以減小后續(xù)選取與入?yún)⒆罴哑ヅ涞姆椒ǖ倪\(yùn)算量,節(jié)省內(nèi)存及計(jì)算資源,提高匹配速度。若初篩后參數(shù)個(gè)數(shù)及參數(shù)數(shù)據(jù)類(lèi)型均相同的同名方法個(gè)數(shù)仍然多于一個(gè),則采用前面的確定繼承層數(shù)并計(jì)算方法向量模值的方法得到最佳匹配的同名方法。
本實(shí)施例通過(guò)將入?yún)⑴c同名方法間的繼承關(guān)系映射到向量模值的計(jì)算中,進(jìn)而以模值大小衡量入?yún)⑴c同名方法之間的匹配度,準(zhǔn)確有效地為入?yún)⑦x擇與之匹配程度高的類(lèi)重載方法。解決了現(xiàn)有技術(shù)中當(dāng)存在多個(gè)重載方法,且入?yún)⒘斜砼c方法列表具有繼承關(guān)系時(shí)無(wú)法正確調(diào)用與入?yún)⒘斜砥ヅ涞姆椒ǖ募夹g(shù)問(wèn)題,本發(fā)明實(shí)現(xiàn)了快速、高效為入?yún)⒋_定是否有可調(diào)用的方法,以及為入?yún)⑻峁┛煽啃愿叩念?lèi)重載方法。
圖3為本發(fā)明一實(shí)施例提供的反射場(chǎng)景下確定類(lèi)重載方法的方法的流程示意圖。如圖3所示,在上述實(shí)施例的基礎(chǔ)上,本實(shí)施例的具體流程如下:
步驟301、根據(jù)外部入?yún)⑺付ǖ姆椒?,確定類(lèi)內(nèi)所有同名方法。
步驟302、若同名方法的個(gè)數(shù)為一個(gè),則判斷外部入?yún)?nèi)的每個(gè)參數(shù)與同名方法中的每個(gè)參數(shù)是否存在繼承關(guān)系;若是,則執(zhí)行步驟303;若不是,則執(zhí)行步驟304。
步驟303、確認(rèn)同名方法為外部入?yún)⒌念?lèi)重載方法。
步驟304、返回?zé)o可用調(diào)用方法的提示信息。
步驟305、若同名方法的個(gè)數(shù)多于一個(gè),則根據(jù)外部入?yún)⒌膮?shù)屬性對(duì)多個(gè)同名方法進(jìn)行篩選;篩選后,若個(gè)數(shù)為零,執(zhí)行步驟304返回?zé)o可用調(diào)用方法的提示信息;若個(gè)數(shù)為一個(gè),執(zhí)行步驟302判斷入?yún)?nèi)的每個(gè)參數(shù)與同名方法中的每個(gè)參數(shù)是否存在繼承關(guān)系;若是,則執(zhí)行步驟303確認(rèn)同名方法為入?yún)?duì)應(yīng)的類(lèi)重載方法;若不是,則執(zhí)行步驟304返回?zé)o可用調(diào)用方法的提示信息;若個(gè)數(shù)多于一個(gè),則執(zhí)行步驟306。
具體的,篩選的方式可以根據(jù)入?yún)⒌膮?shù)個(gè)數(shù),刪除包含有與入?yún)⒌膮?shù)個(gè)數(shù)不相符的同名方法,和/或,根據(jù)入?yún)⒌臄?shù)據(jù)類(lèi)型,刪除與入?yún)⒌臄?shù)據(jù)類(lèi)型不相符的同名方法。
步驟306、獲取外部入?yún)⑴c同名方法間的繼承關(guān)系,確定每個(gè)同名方法相對(duì)于外部入?yún)⒌钠ヅ涠?;根?jù)匹配度結(jié)果,在同名方法中確定該外部入?yún)⒌念?lèi)重載方法。
圖4為本發(fā)明一實(shí)施例提供的反射場(chǎng)景下確定類(lèi)重載方法的裝置的結(jié)構(gòu)示意圖。如圖4所示,該裝置的功能可以通過(guò)硬件實(shí)現(xiàn),也可以通過(guò)硬件執(zhí)行相應(yīng)的軟件實(shí)現(xiàn)。所述硬件或軟件包括一個(gè)或多個(gè)與上述功能相對(duì)應(yīng)的模塊。該裝置包括:
確定模塊1,用于根據(jù)外部入?yún)⑺付ǖ姆椒?,確定類(lèi)內(nèi)所有同名方法;同名方法具有與外部入?yún)⑺付ǖ姆椒嗤姆椒Q;
獲取模塊2,用于當(dāng)同名方法的個(gè)數(shù)多于一個(gè)的情況下,獲取外部入?yún)⑴c每個(gè)同名方法間的繼承關(guān)系;
確定模塊1,還用于根據(jù)繼承關(guān)系,確定每個(gè)同名方法相對(duì)于外部入?yún)⒌钠ヅ涠?;根?jù)匹配度結(jié)果,在多個(gè)同名方法中確定外部入?yún)⒌念?lèi)重載方法。
本實(shí)施例提供的裝置,可用于執(zhí)行上述方法實(shí)施例,其實(shí)現(xiàn)原理和技術(shù)效果類(lèi)似,本實(shí)施例此處不再贅述。
圖5為本發(fā)明一實(shí)施例提供的反射場(chǎng)景下確定類(lèi)重載方法的裝置的結(jié)構(gòu)示意圖。本實(shí)施例在圖4實(shí)施例的基礎(chǔ)上,
獲取模塊2包括:
比較子模塊21,用于將每個(gè)同名方法內(nèi)的每個(gè)形參與外部入?yún)?nèi)的每個(gè)實(shí)參進(jìn)行比較;
確定子模塊22,用于確定外部入?yún)⑴c每個(gè)同名方法間的繼承關(guān)系。
可選的,確定子模塊22包括:
繼承層數(shù)確定子模塊221,用于根據(jù)同名方法內(nèi)每個(gè)形參的位置先后順序,確定外部參數(shù)中的每個(gè)實(shí)參與對(duì)應(yīng)位置處的同名方法中的每個(gè)形參之間的繼承層數(shù);
繼承關(guān)系確定子模塊222,用于根據(jù)繼承層數(shù),確定外部入?yún)⑴c每個(gè)同名方法間的繼承關(guān)系。
可選的,繼承關(guān)系確定子模塊222,具體用于當(dāng)外部參數(shù)中的至少一個(gè)實(shí)參與同名方法對(duì)應(yīng)位置處的形參之間不存在繼承層數(shù)的情況下,確定外部入?yún)⑴c同名方法之間不存在繼承關(guān)系;當(dāng)外部參數(shù)中的每個(gè)實(shí)參與同名方法對(duì)應(yīng)位置處的每個(gè)形參之間存在繼承層數(shù)時(shí),確定外部入?yún)⑴c同名方法之間存在繼承關(guān)系。
可選的,確定模塊1,包括:
向量確定子模塊11,用于根據(jù)繼承關(guān)系,確定每個(gè)同名方法的方法向量;
模值確定子模塊12,用于確定每個(gè)方法向量的模值,根據(jù)模值的大小確定每個(gè)同名方法相對(duì)于外部入?yún)⒌钠ヅ涠取?/p>
可選的,向量確定子模塊11,包括:
維數(shù)確定子模塊111,用于根據(jù)每個(gè)同名方法內(nèi)的形參的參數(shù)個(gè)數(shù),確定每個(gè)同名方法的方法向量的向量維數(shù);
元素值確定子模塊112,用于根據(jù)每個(gè)位置相互對(duì)應(yīng)的實(shí)參與形參之間的繼承層數(shù),確定每個(gè)方法向量中每一維向量元素的元素值。
可選的,確定模塊1還用于,當(dāng)位置相互對(duì)應(yīng)的實(shí)參與形參之間沒(méi)有繼承關(guān)系的情況下,確定同名方法不是外部入?yún)⒌念?lèi)重載方法。
可選的,元素值確定子模塊112,具體用于當(dāng)位置相互對(duì)應(yīng)的實(shí)參與形參之間沒(méi)有繼承關(guān)系的情況下,確定實(shí)參與形參之間的繼承層數(shù)為一預(yù)設(shè)無(wú)效數(shù)值;以預(yù)設(shè)無(wú)效數(shù)值作為與形參對(duì)應(yīng)維的向量元素的元素值;
確定模塊11,還包括:
極大值確定子模塊113,用于根據(jù)預(yù)設(shè)無(wú)效數(shù)值,確定方法向量的模值為極大值;根據(jù)極大值的模值,確定具有極大值的同名方法不是外部入?yún)⒌念?lèi)重載方法。
可選的,元素值確定子模塊112,具體用于當(dāng)位置相互對(duì)應(yīng)的實(shí)參與形參之間存在繼承關(guān)系的情況下,確定實(shí)參與形參之間的繼承層數(shù);以繼承層數(shù)的數(shù)值作為與形參對(duì)應(yīng)維的向量元素的元素值。
可選的,確定模塊1,還包括:
方法確定子模塊13,用于根據(jù)模值的大小對(duì)同名方法進(jìn)行排序,選取具有最小模值的同名方法作為外部入?yún)⒌念?lèi)重載方法。
可選的,裝置還包括:
篩選模塊3,用于根據(jù)外部入?yún)⒌膮?shù)屬性對(duì)多個(gè)同名方法進(jìn)行篩選;參數(shù)屬性包括以下至少一項(xiàng):外部入?yún)⒌膮?shù)個(gè)數(shù)、外部入?yún)⒌臄?shù)據(jù)類(lèi)型。
可選的,篩選模塊3包括:
個(gè)數(shù)篩選子模塊31,用于根據(jù)外部入?yún)⒌膮?shù)個(gè)數(shù),刪除與外部入?yún)⒌膮?shù)個(gè)數(shù)不相等的同名方法;
和/或,
類(lèi)型篩選子模塊32,用于根據(jù)外部入?yún)⒌臄?shù)據(jù)類(lèi)型,刪除與外部入?yún)⒌臄?shù)據(jù)類(lèi)型不相符的同名方法。
可選的,裝置還包括:
判斷模塊4,用于當(dāng)同名方法的個(gè)數(shù)為一個(gè)的情況下,判斷外部入?yún)?nèi)的每個(gè)參數(shù)與同名方法中的每個(gè)參數(shù)是否存在繼承關(guān)系;若是,則確認(rèn)同名方法為外部入?yún)⒌念?lèi)重載方法;若不是,則返回?zé)o可用調(diào)用方法的提示信息。
本實(shí)施例提供的裝置,可用于執(zhí)行上述方法實(shí)施例,其實(shí)現(xiàn)原理和技術(shù)效果類(lèi)似,本實(shí)施例此處不再贅述。
最后應(yīng)說(shuō)明的是:以上各實(shí)施例僅用以說(shuō)明本發(fā)明的技術(shù)方案,而非對(duì)其限制;盡管參照前述各實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)的說(shuō)明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對(duì)前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對(duì)其中部分或者全部技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實(shí)施例技術(shù)方案的范圍。