簡體   English   中英

像Obj-C這樣的Java類別?

[英]Java Categories like Obj-C?

當使用其他人的類進行編程時,您常常會發現他們並沒有完全預期您的需求,因此您必須使用一系列的多個步驟來完成一個步驟的操作。

IE,您正在使用為對象建立索引的類,因此具有getObjectAtIndex方法和getNameOfObjectAtIndex方法,但是您想通過名稱而不是索引來訪問對象,因此必須編寫一個使用getNumberOfIndexes方法的循環並遍歷每一個都根據所需名稱檢查名稱,返回索引,然后使用該索引處的對象進行訪問。

如果需要經常執行此操作,請保持代碼整潔,然后進行重構。

在Obj-C中,解決方案是編寫一個類別。 您可以只向該類(及其所有子類)添加一個新的getObjectWithName方法,而不必子類化或封裝它。

在Java中,我還沒有找到一個特別好的解決方案。 相反,我一直在編寫未在任何對象上調用但需要傳遞該對象的輔助函數。基本上,我有一個帶有函數符號的方法,該方法可能很難閱讀。

要明確的是,這不是我編寫的類,並且沒有源代碼。 其他一些代碼正在創建並返回它,因此創建子類無濟於事,因為我無法更改返回它的代碼以返回我的子類。 我可以封裝它,但這似乎比我已經做的還要優雅。

有誰知道我可以實現類似於Java中Obj-C類別的功能的方法嗎?

通常,Java開發人員最常使用輔助方法進行此類操作。 它是靈活的並且相對模塊化,實際上還沒有您想象的那么糟糕。

一種相關的技術是使用包裝對象 ; 一個包含感興趣的類的實例的類,實現相同的接口,並將大多數調用委派給所包含的實例,並可能在此過程中添加一些方法。 某些IDE(當然是IntelliJ IDEA)具有內置工具,可以輕松創建這種委派包裝器。 然后,每當收到對所關注類的實例的引用時,便在進行任何進一步處理之前,圍繞它構造一個委托者的實例。

如果您真的想要更有趣的東西,總會有面向方面的編程(AOP) ,它是指在運行時根據各種標准將新代碼注入到現有代碼中的工具和技術。 您可能可以使用AOP來執行類似的操作; 例如,通過向類添加接口以及實現該接口的方法。 您必須在編譯時將對象強制轉換為接口才能使用該方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM