在GWT中将集合转换为客户端

时间:2012-04-14 18:09:05

标签: java gwt guava

以下代码是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);
            }
        });
    }

}

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

1 个答案:

答案 0 :(得分: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);
        }
    }));