问题标题已经说明了一切。我有一个这样声明的字段:
@DatabaseField(canBeNull=false,dataType=DataType.SERIALIZABLE)
List<ScheduleTriggerPredicate> predicates = Collections.emptyList();
根据上下文,predicates
可以包含空列表或返回的不可变列表Collections.unmodifiableList(List)
与ArrayList
作为其参数。我因此know所讨论的对象是可序列化的,但我无法告诉编译器(因此 ORMLite)它是可序列化的。因此我得到这个异常:
SEVERE: Servlet /ADHDWeb threw load() exception
java.lang.IllegalArgumentException: Field class java.util.List for field
FieldType:name=predicates,class=ScheduleTrigger is not valid for type
com.j256.ormlite.field.types.SerializableType@967d5f, maybe should be
interface java.io.Serializable
现在,如果有某种方法可以禁用检查,那么一切显然都会正常工作......
FM 中详细记录了定义自定义数据类型:
http://ormlite.com/docs/custom-data-types http://ormlite.com/docs/custom-data-types
您可以延长SerializableType
类和@Override
the isValidForField(...)
方法。在这种情况下,这将序列化集合。
public class SerializableCollectionsType extends SerializableType {
private static LocalSerializableType singleton;
public SerializableCollectionsType() {
super(SqlType.SERIALIZABLE, new Class<?>[0]);
}
public static LocalSerializableType getSingleton() {
if (singleton == null) {
singleton = new LocalSerializableType();
}
return singleton;
}
@Override
public boolean isValidForField(Field field) {
return Collection.class.isAssignableFrom(field.getType());
}
}
要使用它,您必须替换dataType
with persisterClass
in @DatabaseField
:
@DatabaseField(canBeNull = false,
persisterClass = SerializableCollectionsType.class)
List<ScheduleTriggerPredicate> predicates = Collections.emptyList();
我已添加到单元测试中以显示可用的代码。这是github 变更 https://github.com/j256/ormlite-core/commit/6a9e49b8154f233fe551e13aea0892d0afaa31e6.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)