是否有方法在JAVA中设置以下构造:
详细说明:我正在使用ORMLite,需要在反序列化之后刷新模型的ForeignCollections。为此,我需要从模型中引用我的DAO,而我不想这样做。
因此,我提出了以下概念:
private void readObject(java.io.ObjectInputStream stream) throws IOException, ClassNotFoundException的实现中,在阅读了所有ivars之后,我调用了模型中所保存的静态字段的onAfterDeserialization-Method。- In the Dao, I'm setting the static field of the model. So when the deserialization is finished, a method in my Dao is called. Where i can finally refresh the ForeignCollection so it's still valid after deserialization.
所以我要找的是某种方法,使整个方法更加通用,所以,我不需要为我的20个模型实现这种行为。最后,这将是一个安卓应用程序。所以没有花哨的Java-8的东西。
发布于 2017-07-02 08:43:06
我将使用另一个类将Model类映射到SerializableObserver实现。例如,
DeserializerMap:
public enum DeserializerMap {
INSTANCE;
private Map<Class<? extends Model>, SerializableObserver> modelObserverMap = new HashMap<>();
public void registerSerializableObserver(Class<? extends Model> modelClass, SerializableObserver serializableObserver) {
modelObserverMap.put( modelClass, serializableObserver );
}
public void deregisterSerializableObserver(Class<? extends Model> modelClass) {
modelObserverMap.remove( modelClass );
}
public SerializableObserver getSerializableObserver(Class<? extends Model> modelClass){
return modelObserverMap.get( modelClass );
}
}模型类:
public class ModelClass implements Model{
private int id;
public ModelClass(int id) {
this.id = id;
}
private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException{
ois.defaultReadObject();
DeserializerMap.INSTANCE.getSerializableObserver( this.getClass() ).
onAfterDeserialization( this );
}
}“模型”接口只是扩展了可序列化的,并在DeserializerMap中使用,但是您可以摆脱这个接口,在DeserializerMap中使用Class<? extends Object>而不是Class<? extends Model>,
型号:
public interface Model extends Serializable{
}DAO类:
public class DAOClass {
public DAOClass(){
SerializableObserver serializableObserver = new SerializableObserver() {
@Override
public void onAfterDeserialization(Object object) {
System.out.println("After deserialization");
anotherMethod();
}
};
DeserializerMap.INSTANCE.registerSerializableObserver( ModelClass.class, serializableObserver );
}
public void anotherMethod(){
System.out.println("another method");
}
}如果除了调用DAOClass方法之外,您不想做任何额外的事情,那么您可以用DAOClass类映射ModelClass,但是我建议使用DAO与您的持久性系统进行通信,并在主类中注册映射,而不是在DAOClass构造函数中。
发布于 2017-07-02 08:16:35
在不了解细节的情况下,我可以提供以下内容:使用Interface来定义常见的行为,然后使用一个通用抽象基类来定义公共结构,这是您应该考虑的事情。
https://stackoverflow.com/questions/44865368
复制相似问题