ArrayListを拡張するLibraryというクラスがあります。私がこれを行ったのは、(私が思うに)本当のことです-LibraryクラスとArrayListの間に関係が存在する-Libraryは単に本のコレクションといくつかのメソッドです。
それらのメソッドの1つはload()で、保存されたLibraryオブジェクトを逆シリアル化します。私の質問は、逆シリアル化されたオブジェクトをライブラリの「アクティブな」インスタンスにするにはどうすればよいですか?Libraryオブジェクトを返すthis = load()
ので、ライブラリのコンストラクターのようなことをしたいと思います。ただし、実行しようとするとload()
コンパイラエラーが発生します。cannot assign a value to final variable this
この目的で使用する適切な構文は何ですか?
public class Library extends ArrayList<Book> implements Serializable{
public Library(){
load();
}
...
Library load() throws IOException, ClassNotFoundException {
File f = new File (System.getProperty("user.home")+"\\Documents\\CardCat\\library.ser");
ObjectInputStream ois = new ObjectInputStream (new FileInputStream (f));
Library lib = (Library)ois.readObject();
System.out.println("ran load sucessfully");
return lib;
}
編集:これは間違ったアプローチであり、代わりにArrayListを拡張しないが、ArrayListインスタンス変数を持つLibraryクラスを作成する必要があるというのが普遍的なコンセンサスのようです。これは実際には約1時間前に構造化した方法ですが、ArrayListを拡張する方が少し簡単かもしれないと思いました。これの主な理由は、ArrayListがLibraryクラスの唯一の変数であり、他のクラスからそのArrayListを頻繁に参照し、そのたびにを呼び出す必要があったためlibrary.libList
、単純に参照できると思いました。library
簡単になります。振り返って、あなたの入力を考慮に入れると、これはかなり些細な利点であり、パフォーマンスに大きな打撃を与えるという犠牲を払うことになります。
それらの費用をもっとよく理解したいのですが、あなたの考えを正しく理解していますか?私は(明らかに、確かに)まだあらゆる種類のことを学び、実験しており、失敗した実験を特定するのに役立つ入力に非常に感謝しています。