有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java GWT 2.5.1序列化和子类化问题

// ChildObjectValue.java
public class ChildObjectValue extends GenericObjectValue {

    private static final long serialVersionUID = xxxx;

    private BigDecimal bigDecimal;

    public BigDecimal getBigDecimal()
    {
        return bigDecimal;
    }

    public void setBigDecimal(BigDecimal bigDecimal)
    {
        this.bigDecimal = bigDecimal;
    }

}

// ChildObjectServiceASync.java
void loadChildObject(AsyncCallback<List<ChildObjectValue>> callback);

// ChildObjectServiceImpl.java
// (...)
List<ChildObjectValue> childrenObjects = new ArrayList<ChildObjectValue>();
ChildObjectValue childObjectValue = new ChildObjectValue();
childObjectValue.setBigDecimal(new BigDecimalChildClass("1.04"));
// BigDecimalChildClass extends BigDecimal but has many dependencies tocomponents not compilable by GWT
// (...)
return childrenObjects; // ASyncCallBack return value

执行结果: 通用域名格式。谷歌。gwt。使用者客户rpc。序列化异常:类型“。。。BigDecimalChildClass“”未包含在此可由此SerializationPolicy序列化的类型集中,或者无法加载其类对象。出于安全目的,不会序列化此类型:实例=1.04

事实上,如果我更改ChildObjectValue。java,并更改ChildObjectValue。从bigDecimal到BigDecimalChildClass的bigDecimal声明,GWT将拒绝编译

我猜问题来自方法setBigDecimal(BigDecimal-BigDecimal),它允许BigDecimal的子类作为参数。GWT的DevGuideServerCommunication确实说GWT RPC支持多态参数和返回类型,“但是,我感到困惑。一定有一些限制,我还没有完全理解

我想我可以更改setBigDecimal方法,从可能的子类参数创建一个新的BigDecimal对象,但是对于这个问题,什么是合适的、通用的解决方案呢? 我应该确保对于我拥有的每个AsyncCallback类型参数,它们的非瞬态字段和set/get参数都是最终类的实例吗

最后但并非最不重要的一点是,使用BigDecimal似乎不适合GWT。保存/加载值确实有效,但我最终在Eclipse控制台中实现了这一点: JAVA实例化异常:java。数学大十进制 持续的。。。 JAVAlang.RuntimeException:未能计算:=类。新的(); 持续的。。。 我想这是因为BigDecimal没有无参数构造函数。。。那我该怎么办


共 (0) 个答案