我有一些需要(反)序列化的类。我不想在每个类中重复代码,所以我想创建像这样的子类
public class Swan extends Animal {}
并且一个像这样的基类:
public abstract class Animal {
protected String name;
// ...
public void saveAnimal(String filename) {
//ObjectOutputStream, save name...
}
public static /*returntype*/ loadAnimal(String filename) {
//ObjectInputStream...
}
}
基本上我希望这个能够工作:
Swan s1 = new Swan("name");
s1.saveAnimal("/pathToSaveFile");
Swan s2 = (Swan)loadAnimal("/pathToSaveFile") OR
Swan s2 = loadAnimal("/pathToSaveFile")
如果Animal是抽象的,我该如何做呢?如果方法看起来像这样:
public static <T extends Animal> T loadAnimal(String filename) {
//loadFromFile
}
我无法返回new T(name) //无法直接实例化参数
。我了解了一些反射知识,但是您无法获取泛型类型T的类。解决方法是将类型的类传递到构造函数中,但动物应该是抽象的。