假設你有一個API,它是無法訪問的改變:Java的裝飾簡單的方法
List<LegacyObject> getImportantThingFromDatabase(Criteria c);
成像遺留對象有一噸的領域,你想擴展它,使獲得的某些信息更容易:
class ImprovedLegacyObject extends LegacyObject {
String getSomeFieldThatUsuallyRequiresIteratorsAndAllSortsOfCrap() {
//cool code that makes things easier goes here
}
}
但是,你不能只投放至ImprovedLegacyObject
,即使場都是一樣的,你沒有改變任何底層代碼,你只添加到它使代碼,使用LegacyObject
仍然有效,但新代碼更易於編寫。
是否有可能有一些簡單的方法來將LegacyObject
轉換爲ImprovedLegacyObject
而不重新創建所有的字段或訪問器?它也應該是一個快速操作,我知道你可以通過使用反射來複制所有屬性來執行某些操作,但是我認爲這樣做對於羣衆來說不會那麼快。編輯:有什麼是你的可以用靜態方法嗎?裝飾一個現有的對象?
是的,我想這可能是我做這件事的唯一方法:o。我試圖通過懶惰來避免這種情況......但是,Java有一種很酷的方式來做到這一點,而無需創建額外的對象並對所有屬性執行寫操作。如果沒有人想出更好的東西,我會接受 – walnutmon 2010-07-01 17:39:20