При передаче объектов через вызов RPC рекомендуется объявить конкретные типы параметров в интерфейсе RPC. Если по какой-то причине вы не можете использовать конкретный класс в интерфейсе RPC, постарайтесь быть как можно более конкретным.
Это потому, что компилятор GWT при создании javascript должен учитывать все возможные варианты List в модуле компиляции. Это включает в себя все классы, расширяющие List и Serializable интерфейс в пути к классам. Перестановки могут быть огромными, что повлияет на ваше время компиляции, а также размер загрузки приложения.
Таким образом, лучший подход - определить ваш интерфейс как
public ArrayList<YourType> myMethod(TransactionCall call) {...}
вместо
public List<Serializable> myMethod(TransactionCall call) {...}
Таким образом, компилятор должен генерировать модули компиляции только для расширений ArrayList и YourType. Преимущество заключается в более быстром времени компиляции и меньшем размере скомпилированных файлов javascript, что позволяет быстрее загружать ваше приложение.
В случае, если вам нужно возвращать широкий спектр несвязанных объектов в вашем вызове RPC, попробуйте создать класс-обертку и вернуть объект класса-обертки с возвращаемым значением. Используйте класс-оболочку в определении метода RPC. Отказавшись от желания объявить обернутое поле как Object или Serializable, вы отмените все преимущества сериализации, которые вы получили, используя обертку. Вместо этого вы можете определить интерфейс Wrapper и небольшой набор реализаций Wrapper для каждого конкретного типа, который вы хотите вернуть через вызов RPC.