我有一个autobean,其中只有UI需要一个属性。我相信你可以使值无效,而AutoBeanCodex
不会序列化该属性,但这等同于序列化所需的额外步骤。
我希望有一些类似于Editor
@Ignore
注释的注释。例如:
public interface Foo {
...
@Ignore
String getUiOnlyProperty();
}
因此,除了在序列化时将值清零之外,还有其他方法可以保持autobean属性不被序列化吗?
答案 0 :(得分:2)
Autobeans是JSON / XML /无论何种格式的Java皮肤 - 它们实际上并不是为了保存其他数据而设计的。也就是说,有几种想法可以用开箱即用的工具来解答你的问题,或者可能激发一些关于如何解决问题的其他想法。
您应该能够通过省略setter来构建只读属性。这不是你要求的,但仍然可能很方便。
沿着这些方向,@PropertyName
注释的JavaDoc似乎暗示了这个可能的特征:
/**
* An annotation that allows inferred property names to be overridden.
* <p>
* This annotation is asymmetric, applying it to a getter will not affect the
* setter. The asymmetry allows existing users of an interface to read old
* {@link AutoBeanCodex} messages, but write new ones.
*/
阅读旧消息但是编写新消息似乎可能更接近您所追求的内容,并且仍然允许您使用看起来像豆子的东西。
真正的答案似乎是AutoBean.setTag
和getTag
方法:
/**
* A tag is an arbitrary piece of external metadata to be associated with the
* wrapped value.
*
* @param tagName the tag name
* @param value the wrapped value
* @see #getTag(String)
*/
void setTag(String tagName, Object value);
...
/**
* Retrieve a tag value that was previously provided to
* {@link #setTag(String, Object)}.
*
* @param tagName the tag name
* @return the tag value
* @see #setTag(String, Object)
*/
<Q> Q getTag(String tagName);
从AbstractAutoBean
中这些方法的实现可以看出,这些方法将数据存储在与通过网络发送的内容完全不同的对象中。缺点是您需要获取底层的AutoBean对象(请参阅com.google.web.bindery.autobean.shared.AutoBeanUtils.getAutoBean(U)
以获得一种方法)以调用这些方法。
答案 1 :(得分:0)
public interface ReplicateOptions {
/**
* Create target database if it does not exist. Only for server replications.
*/
Boolean getCreateTarget();
void setCreateTarget(Boolean create_target);
//baggage to pass along
interface ReplicateCall<T> extends ReplicateOptions {
/**
* If true starts subscribing to future changes in the source database and continue replicating them.
*/
AsyncCallback<T> getContinuous();
void setContinuous(AsyncCallback<T> continuous);
}
}