Хотя ни одна хорошая среда не должна пытаться изменить своих пользователей, позвольте мне объяснить, почему сериализация GWT работает так, как она работает. Я не знаю точную механику этого, поэтому я могу ошибаться, но это суть того, что я видел.
GWT уже удаляет дополнительный код за пределами интерфейсов RPC - например, если вы берете приложение без RPC, вы можете свободно использовать интерфейсы, такие как List и Map и Set to your hearts, - GWT автоматически включает только реализации который вы на самом деле используете. Зачем? Потому что он имеет доступ к вашему коду и способен фактически проходить через все видимые перестановки кода и удалять неиспользуемые классы. Таким образом, GWT на самом деле не создает взрывы классов при использовании интерфейсов.
Проблема полностью в RPC. Смысл службы RPC состоит в том, что серверу необходимо реализовать интерфейс RPC - это означает, что если интерфейс требует, чтобы метод возвращал список, сервер может возвращать любую реализацию списка, которую он хочет, до тех пор, пока как это можно сериализовать.
В этом проблема - у GWT нет абсолютно никакой возможности узнать, какую реализацию интерфейса будет использовать сервер, либо во время компиляции, либо в какой-то момент в будущем. Код сервера может и во многих случаях разрабатывается независимо от кода на стороне клиента. Таким образом, единственный способ безопасно получить объект типа List по проводам - это заранее знать обо всех возможных его реализациях.