Скажем, у вас есть API, который нельзя изменить:
List<LegacyObject> getImportantThingFromDatabase(Criteria c);
Imaging Legacy Object имеет множество полей, и вы хотите расширить его, чтобы упростить получение определенной информации:
class ImprovedLegacyObject extends LegacyObject {
String getSomeFieldThatUsuallyRequiresIteratorsAndAllSortsOfCrap() {
//cool code that makes things easier goes here
}
}
Однако вы не можете просто привести к своему ImprovedLegacyObject
, даже если поля все одинаковые, и вы не изменили какой-либо из базового кода, вы только добавили в него код, который использует LegacyObject
все еще работает, но новый код легче писать.
Возможно ли иметь какой-нибудь простой способ преобразования LegacyObject
в ImprovedLegacyObject
без воссоздания всех полей или методов доступа? Это также должна быть быстрая операция, я знаю, что вы могли бы выполнить что-то, используя отражения для копирования всех свойств, но я не думаю, что это будет достаточно быстро, если вы сделаете это для масс LegacyObjects
РЕДАКТИРОВАТЬ: Есть ли что-нибудь, что вы могли бы сделать со статическими методами? Чтобы украсить существующий объект?