以下代码是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);
}
});
}
}
我正在寻找原生的番石榴解决方案,而不是一些手写的翻译代码。
答案 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);
}
}));