Jul*_*les 0 collections serializable ormlite
问题标题只是说明了一切.我有一个声明如下的字段:
@DatabaseField(canBeNull=false,dataType=DataType.SERIALIZABLE)
List<ScheduleTriggerPredicate> predicates = Collections.emptyList();
Run Code Online (Sandbox Code Playgroud)
根据上下文,predicates
可以包含空列表或返回不可变列表Collections.unmodifiableList(List)
与ArrayList
作为它的参数.因此,我知道有问题的对象是可序列化的,但我无法告诉编译器(以及因此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
Run Code Online (Sandbox Code Playgroud)
现在,如果只是某种方式来禁用支票,一切显然都会正常工作......
定义自定义数据类型在FM中有很好的记录:
您可以扩展的SerializableType
类@Override
的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());
}
}
Run Code Online (Sandbox Code Playgroud)
要使用此您必须更换dataType
同persisterClass
在@DatabaseField
:
@DatabaseField(canBeNull = false,
persisterClass = SerializableCollectionsType.class)
List<ScheduleTriggerPredicate> predicates = Collections.emptyList();
Run Code Online (Sandbox Code Playgroud)
我已经添加到单元测试中以显示工作代码.这是github的变化.
归档时间: |
|
查看次数: |
1078 次 |
最近记录: |