我有我想(去)序列化的類。我不希望出現在每一類中的代碼,所以我想我會子類這樣從抽象基類返回子類的對象
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")
我怎麼做,如果動物是抽象的?如果方法如下所示:
public static <T extends Animal> T loadAnimal(String filename) {
//loadFromFile
}
我不能返回new T(name) //parameter cannot be instantiated directly
。我讀了一些關於反射的東西,但是你不能得到泛型類型T的類。解決方法是將類型的類傳入構造函數,但Animal應該是抽象的。
請問這個問題有點幫助你嗎?:http://stackoverflow.com/questions/20638749/chaining-returning-base-objects-and-type-mismatch-to-extended-classes – Adam