0

次のコードは GWT RPC サーベットの実装です。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);
            }
        });
    }

}

手書きの翻訳コードではなく、ネイティブのグアバ ソリューションを探しています。

4

1 に答える 1

4

この場合の guava の問題は、Lazy-evaluation を使用し (これは多くの場合適切ですが、ここではそうではありません)、コレクションが元のコレクションによってバックアップされることです。唯一の解決策は、元のオブジェクトによってバックアップされておらず、すべての評価が実行された新しいコレクションを強制することです。このような方法でうまくいくはずです (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 に答える