这更像是一个软件工程问题。 我有一个基类,以及扩展基类的类。我的目标是有一种更简洁的方式来反序列化,例如String。我目前的解决方案是获取此序列化字符串,从预定类型字段中提取“类型”,然后使用switch语句调用相应的子类'反序列化方法。有没有办法通过利用Java语言而不是切换语句来做到这一点?
public abstract class Base {
String type;
}
public class A extends Base{
public A(String serializedString){...}
}
public class B extends Base{
public B(String serializedString){...}
}
public class AuxMethods {
public static Base deserialize(String s){
String type = extractType(s); // gets the type from the serialized object string
Base deserialized = null;
switch(type){
case "A":
deserialized = new A(s);
break;
case "B":
deserialized = new B(s);
}
}
}
答案 0 :(得分:3)
存储完整的类名(或假设所有类都在特定的包中),使用Class.forName,然后查找字符串构造函数以创建对象。
答案 1 :(得分:0)
我认为你没有以正确的方式使用序列化。您应该简单地序列化Base
对象本身(使用ObjectOutputStream
),而不是存储它指向的子类对象的字符串类名。实际的对象类型将自动与Java一起存储在序列化的子类对象中。
这种方式在反序列化时(使用ObjectInputStream
),您自动获取相同的子类对象,而不使用switch-case
语句来确定Base
类引用应指向哪个对象