我使用XMLEncoder将对象图写入XML文件。这很好,除了UUID属性(在我的中名为id)之外,我知道我需要一个PersistenceDelegate来完成它。我写了以下一篇:
class UuidPersistenceDelegate extends PersistenceDelegate {
protected Expression instantiate(Object oldInstance, Encoder out) {
UUID id = (UUID) oldInstance;
return new Expression(oldInstance, id.getClass(), "fromString", new Object[]{ "id" } );
}
}并将其设置为编码器:
encoder.setPersistenceDelegate(UUID.class, new UuidPersistenceDelegate());在运行时,当调用encoder.writeObject(.)时,我会得到以下异常:
java.lang.IllegalArgumentException:无效的UUID字符串: id
有人知道怎么让这件事成功吗?
发布于 2014-03-09 13:53:28
我还没见过有人真正正确地回答这个问题,这实际上是可行的:
public class UUIDPersistenceDelegate extends PersistenceDelegate {
private HashSet<UUID> hashesWritten = new HashSet<UUID>();
public Expression instantiate(Object oldInstance, Encoder out) {
UUID id = (UUID) oldInstance;
hashesWritten.add(id);
return new Expression(oldInstance, UUID.class, "fromString", new Object[]{ id.toString() } );
}
protected boolean mutatesTo(Object oldInstance, Object newInstance) {
return hashesWritten.contains(oldInstance);
}}
发布于 2012-01-20 19:07:17
欢迎来到这里。您非常接近您的解决方案,这是代码中的一个小问题。您正在将字符串"id“传递到参数中,我确信您不想这样做。试一试:
protected Expression instantiate(Object oldInstance, Encoder out) {
UUID id = (UUID) oldInstance;
return new Expression(oldInstance, UUID.class, "fromString", new Object[]{ id.toString() } );
}输出的XML并不漂亮,但至少可以消除错误。
https://stackoverflow.com/questions/8944502
复制相似问题