0

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

我想念番石榴内部的任何解决方案吗?

@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);
            }
        });
    }

}

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

4

1 回答 1

4

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

return new ArrayList<GoalDto>(Collections2.transform(dao.getAllGoals(), new Function<Goal, GoalDto>() {
        public GoalDto apply(@Nullable Goal goal) {
            return dtoUtil.toGoalDto(goal);
        }
    }));
于 2012-04-14T18:12:08.873 回答