我不能在 GWT Collections.unmodifiableList(List l) 中使用来使我的列表只可读,因为它不是可序列化的替代方法吗?

I can't use in GWT Collections.unmodifiableList(List l) to make only readable my List, because isn't serializable, alternative ways?

我正在使用 GWT-RPC 创建应用程序。在某些时候,服务器 return 使用 Collections.unmodifiableList(List l) 的 Collection 给客户端。客户端报错:

[WARN] Exception while dispatching incoming RPC call
com.google.gwt.user.client.rpc.SerializationException: Type 'java.util.Collections$UnmodifiableList' was not included in the set of types which can be serialized by this SerializationPolicy or its Class object could not be loaded. For security purposes, this type will not be serialized

所以,我需要一种替代方法来获取唯一可读的集合,我该怎么做?非常感谢

我的代码如下:

    try {
        LinkedList all=new LinkedList();
        while(res.next()){
            all.add(objectFromCursor(res));
        }
        return Collections.unmodifiableList(all);
    } catch (SQLException e) {
        throw new ExceptionHandler("Error: "+e.getMessage());
    }



private static Film objectFromCursor(ResultSet res) throws SQLException{
    Film film=new Film(res.getString(1));
    film.setRegista(res.getString(2));
    film.setAnnoDiProduzione(res.getInt(3));
    return film;
}

不可修改的可序列化集合本身似乎是矛盾的。为了反序列化一个对象(我认为 "deserializable" 隐含在 "serializable" 中),它必须是可修改的。

所以只需使用可修改的集合通过 GWT-RPC 传递。

您可以使用 guava 的 ImmutableCollections。 https://github.com/google/guava/wiki/ImmutableCollectionsExplained

Guava (link to their Github Page) 是 Google 为 Java 开发的实用程序库,但他们也为 GWT 制作了一个版本。要在您的项目中使用 ImmutableCollections,请将 guava-gwt 添加到您的项目并继承

<inherits name="com.google.common.collect.Collect"/>