JAVA:多个类中的静态字段+;公共接口
有没有办法在JAVA中设置以下构造:JAVA:多个类中的静态字段+;公共接口,java,interface,architecture,static,Java,Interface,Architecture,Static,有没有办法在JAVA中设置以下构造: 具有公共接口或基类的 具有由公共接口声明的静态公共字段 实现公共接口的每个模型都应该有自己的静态字段(不是所有模型的一个共享实例) 详细说明: 我正在使用ORMLite,在反序列化之后,我需要刷新模型的外来集合。为此,我需要从模型中引用我的DAO,我不想这样做 因此,我提出了以下概念: 在以下接口的每个模型中保留一个静态字段: public interface SerializableObserver { void onAfterDeseriali
- 具有公共接口或基类的
- 具有由公共接口声明的静态公共字段
- 实现公共接口的每个模型都应该有自己的静态字段(不是所有模型的一个共享实例)
- 在以下接口的每个模型中保留一个静态字段:
public interface SerializableObserver { void onAfterDeserialization(Object object); }
- 在我的
,我调用了模型中静态字段的私有void readObject(java.io.ObjectInputStream stream)的实现中,在读取所有IVAR后抛出IOException、ClassNotFoundException
反序列化后方法
- 在Dao中,我正在设置模型的静态字段。因此,当反序列化完成时,将调用我的Dao中的方法。在这里,我可以最终刷新ForeignCollection,使其在反序列化后仍然有效李>
最后,这将是一个Android应用程序。所以没有什么特别的Java-8 在不了解细节的情况下,我可以提供以下内容:
使用一个接口来定义通常需要的行为,然后定义一个通用的抽象基类来定义一个公共结构是你应该考虑的。 < P>我将使用另一个类,它将模型类映射到串行化的观察者实现。 比如说, 反序列化映射:
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 );
}
}
“Model”接口只是扩展了Serializable,并用于反序列化映射,但您只需去掉该接口并使用
ClassI就可以了。我不理解您的问题。虽然我觉得这有点有趣,但我们可以开始聊天吗?这就是我尝试过的。但据我所知,我不能为接口声明静态字段或方法。非常感谢,非常有用@Saschahard我在Upwork上发现了你的问题,你能接受一个建议吗?
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 );
}
}
public interface Model extends Serializable{
}
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");
}
}