Vic*_*Vic 2 java serialization
我一直在使用一个类:
public class Change {
Object affectedObj; //takes an instance of any class
String affectedFieldName;
float shift;
...
public void apply() {
affectedObj.getClass().getField(affectedFieldName).setFloat(affectedObj, shift);
}
}
Run Code Online (Sandbox Code Playgroud)
我现在需要序列化。由于Object不可序列化,如何使我的类可序列化?
我想到的一件事是Object用泛型<T>类型替换:
public class Change<T> {
T affectedObj; //takes an instance of any class
String affectedFieldName;
float shift;
...
public void apply() {
affectedObj.getClass().getField(affectedFieldName).setFloat(affectedObj, shift);
}
}
Run Code Online (Sandbox Code Playgroud)
但我无法判断这种方法的缺点。如果这是一个好方法,那么这里关于序列化的陷阱是什么?
聚苯乙烯
谢谢各位大佬的回复。他们都对我很有启发性和帮助。
不一定有任何问题。Object不是Serializable,但也不是 Serializable。您仍然可以序列化一个声明Object字段的类,前提是在序列化时字段恰好为 null 或它们指向Serializable对象的实例。(否则,序列化将失败并显示NotSerializableException.)
如果您真的需要affectedObj成为“任何类”,那么您确实有问题,因为无论您多么努力,有些东西都无法序列化(例如,打开网络连接)。
如果要限制affectedObj为Serializable对象,只需将该字段声明为 type Serializable:
public class Change implements Serializable {
Serializable affectedObj; // takes an instance of any Serializable class
...
}
Run Code Online (Sandbox Code Playgroud)
没有必要为此使用泛型。如果出于其他原因需要,您仍然可以使用泛型,例如,如果您希望类的用户能够以完全类型化的方式设置和获取该字段。但是,它不影响序列化。
| 归档时间: |
|
| 查看次数: |
2692 次 |
| 最近记录: |