簡體   English   中英

(Java)為通過反射創建的新對象創建方法嗎?

[英](Java) Creating methods for new object created via reflection?

我的類中有抽象方法,該類中的抽象方法需要使用我的項目的SEPARATE項目中的外國類來實現。

-A的所有類instanceof最初都是使用反射生成的-

因此,無論如何,假設A類是抽象的,而B類(非抽象)擴展了A

B在類A中具有所有未實現的方法,因為B在我的工作空間中,所以我知道要添加這些方法。

C還擴展了A,但是C在A中僅具有抽象方法的一個子集。但是,C不在我的工作空間中。

因此,對於A中C NOT中的每個抽象方法,我需要找到某種方法為A添加方法,如下所示:

(每種方法)

public <corresponding return type> <missingMethodName>() { return null; }

這可能嗎?

PS:請假設我要么必須完全重寫我的代碼才能與我無法控制的對象同步,要么要實現一種我上面提到的解決方案。

不,除非我對您的閱讀有誤,否則您的要求實際上並沒有多大意義。

如果您想注入方法

public <corresponding return type> <missingMethodName>() { super.<missingMethodName>(); }

到C中,這擴展了A(未實現該方法),它究竟會做什么?

如果要在A中提供默認實現,那很好,並且不會影響C。如果將抽象方法添加到A中,則C必須實現它們,將其標記為抽象,否則將無法編譯(或引發序列化) ,或一些怪異的錯誤),如果您使用由舊A編譯的C。

您永遠不需要這樣做,因為任何具有super實現的實例方法都可以在子類實例上調用。

您可以使用字節碼添加這些方法,但是它們唯一的區別是更改getDefinedMethods()的列表。 但是,它不會改變類的對象的行為。

它的安靜困難,但是您可以使用Javassist做到

Javassist(Java編程助手)是一個Java庫,提供了一種操作應用程序的Java字節碼的方法。 1從這個意義上講,Javassist提供了對結構反射的支持,即在運行時更改類的實現的能力。 字節碼操作是在加載時通​​過提供的類加載器執行的。 http://en.wikipedia.org/wiki/Javassist

暫無
暫無

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

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