Я знаю, что об этом спрашивали давным-давно, но я тоже изо всех сил пытался найти ответ.Я понял, что AutoBeans, поскольку они в основном просто модные обертки для JSON, по-прежнему содержат все данные для полей дочернего объекта, к которому вы хотите его преобразовать.Поэтому я написал такой метод:
public <A, B> B cast( A sourceObject, Class<B> targetClass )
{
AutoBean<A> sourceBean = AutoBeanUtils.getAutoBean( sourceObject ); // Get the corresponding AutoBean.
HasSplittable splittableBean = ( HasSplittable ) sourceBean; // Implementation (if still AbstractAutoBean) supports this interface ;)
Splittable splittable = splittableBean.getSplittable().deepCopy(); // If you don't copy it, decode() tries to be clever and returns
// the original bean!
AutoBean<B> targetBean = AutoBeanCodex.decode( typeFactory, targetClass, splittable ); // Create new AutoBean of
// the target type.
return targetBean.as(); // Get the proxy for the outside world.
}
- где typeFactory расширяет AutoBeanFactory, как вы можете видеть.
Это сработало достаточно хорошо для меня.Самым хитрым было приведение к HasSplittable, так как AutoBean не расширяет этот интерфейс, а AbstractAutoBean (который реализует AutoBean) - и подкласс этого является тем, что возвращается вызовами getAutoBean ().
Youтакже необходимо скопировать Splittable, иначе AutoBeanCodex думает: «Эй, у меня уже есть AutoBean для этого Splittable! Вот, пожалуйста!»- и просто дает вам оригинал.;)
В любом случае, вы можете бросить вниз, вверх ... в сторону!: P
Позднее редактирование: Спустя несколько месяцев, наткнувшись на это, я решил добавить небольшое предостережение о том, что Джонатан упомянул ниже.Метод, который я описал здесь, предназначен для использования в AutoBean, который не был изменен с момента десериализации.Это потому, что (AFAIK) нет гарантии, что любые вызываемые вами сеттеры действительно обновят JSON (необходимый для приведения).Это, вероятно, не имеет большого значения, так как обычно вы будете использовать это, когда у вас есть входящий DTO и вы хотите привести его к типу real как можно скорее, прежде чем делать с ним что-то еще.В нашем случае ни у одного из наших AutoBeans даже не было сеттеров, так что это не было проблемой.;)
После того, как вы разыгрываете его, вы можете делать все, что захотите, с полученным бином, который, в конце концов, только что с фабрики!