より破棄されるときに呼び出されるメソッドである。して定義されている(中身は空)。オーバーライドして使う。ファイナライザはオブジェクトの持つ資源(メモリ、ファイル)を解放するために使えそうである。この項目は、ほとんどの場合でファイナライザは使うべきでないと述べられている。使うべきでないかファイナライザを使うべきでない理由は以下の通りである。伴うものであることによる。実装依存であることにより、プログラマの意図したタイミングでファイナライズされない。対象オブジェクトもファイナライズされる保証はない。ファイナライズ中に例外が投げられると起きる。これにより、オブジェクトが不正な状態のままになる可能性がある。ファイナライザで投げられた例外はスタックトレースを表示してプログラムを終了させない。倍遅いということである。いうメソッドの中で資源を後始末する処理を書いておき、以下のように使えばよい。ファイナライザの代わりに明示的終了メソッド}あるオブジェクトの明示的終了メソッドが呼び出されたあとに、そのオブジェクトが使われないようにする必要がある。投げられるようにすればよい。ファイナライザの存在意義では、ファイナライズの存在意義は何になるのだろうか。それは以下の二つである。明示的終了メソッドを呼び忘れた際のセーフネットとして使えるということである。このセーフネットが使われたときは、何らかの方法で正しく使われていないことに対する警告を記録しておくべきである。上で動いているネイティブオブジェクトに関係する。ネイティブピアは、通常のオブジェクトがネイティブメソッドを通して委譲するネイティブオブジェクトのことである。そのため、ネイティブピアが重要な資源を持っていないときはファイナライザで解放するのが適切である。即座に解放したい資源をネイティブピアが持っているときは、明示的終了メソッドで解放したほうがよい。ファイナライザガーディアンファイナライザを持つクラスがサブクラスを持つ場合を考える。呼ばないと、スーパークラスはファイナライズされない。ファイナライザはサブクラスからスーパークラスへ連鎖的に呼び出しされない。呼ぶために、以下のようにすればよい。節を忘れるとスーパークラスがファイナライズされない。これを防ぐために、ファイナライザガーディアンを使うことができる。ファイナライザガーディアンは、ファイナライズしたいクラスの内部クラスとして、無名クラスを使い、以下のように書く。よってファイナライズの対象となるインスタンスは、以下の二つである。インスタンスがファイナライズされる。APIを作るときにテストをどう書いていくかこういうのはどうかという最近の考えを書いておきます。specでCommitteeを使ってレスポンスJSONを自動的にバリデー...この記事の続きのようなものです。