GWT поставляется с механизмом, называемым Deferred Binding в качестве замены для отражения. Хотя обычно этот API используется только при вызове GWT.create(Class<?>)
, его также можно использовать для написания генераторов кода, которые вызываются во время процесса компиляции GWT (т. Е. Перевод с Java на Javascript).
Вы можете использовать это для создания генератора кода, который будет выводить для любого из ваших классов POJO
вспомогательный класс, который будет содержать методы toMap()
и fromMap()
. GWT предлагает API, который похож на API отражения Java с классами, такими как JClassType
, JMethod
и т. Д. Они могут использоваться для запроса классов (для которых вы хотите сгенерировать код) для их методов получения и установки и генерирования вышеупомянутые методы соответственно.
Ваш клиентский код будет выглядеть в основном так:
Pojo1 pojo1 = ...;
// Pojo1Transformer is the class that is generated for your domain class Pojo1
Pojo1Transformer pojo1Transformer = GWT.create(Pojo1Transformer.class);
Map<String, Object> pojo1AsMap = pojo1Transformer.toMap(pojo1);
...
pojo1AsMap.put(Pojo1Transformer.NAME, "New Name");
Pojo1 changed = pojo1Transformer.fromMap(pojo1AsMap);