以下代码是GWT RPC serlvet实现,
转换后的集合显然在客户端中失败了,因为它与GWT不兼容。

我缺少Guava内的任何提示?

@Singleton
public class DataServiceImpl extends RemoteServiceServlet implements
        DataService {

    @Inject
    ApplicationDao dao;

    @Inject
    DtoUtil dtoUtil;

    public Collection<GoalDto> getAllConfiguredGoals() {
        return Collections2.transform(dao.getAllGoals(), new Function<Goal, GoalDto>() {
            public GoalDto apply(@Nullable Goal goal) {
                return dtoUtil.toGoalDto(goal);
            }
        });
    }

}


我正在寻找一种本地番石榴解决方案,而不是一些手写的翻译代码。

最佳答案

在这种情况下,番石榴的问题在于它使用了惰性评估(通常很好,但在这里不是这样),并且该集合由原始集合备份。唯一的解决方法是强制执行一个新集合,该集合不具有原始对象的备份,并且已执行所有评估。这样的事情应该可以解决问题(假设GoalDto是可以GWT序列化的):

return new ArrayList<GoalDto>(Collections2.transform(dao.getAllGoals(), new Function<Goal, GoalDto>() {
        public GoalDto apply(@Nullable Goal goal) {
            return dtoUtil.toGoalDto(goal);
        }
    }));

08-06 20:24