私は(de-)直列化したいクラスがあります。私は、コードはすべてのクラスで表示したくないので、私は私はこのようなこの抽象基底クラスから子クラスのオブジェクトを返します
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