0

コンストラクタ チェーンを使用していますが、リソース リークが発生していないか心配です。ここに私の2つのコンストラクタがあります:

/**
 * Constructor to build the map based off of a file. Redirects to the Scanner-based constructor
 * @param fileName the name of the file to open
 */
public GeoMap(String fileName) throws FileNotFoundException {
    this(new Scanner(new File(fileName)));
}

/**
 * Constructor to build the map based off of a Scanner. (Probably from an open file.)
 * @param scanner the Scanner to read
 */
public GeoMap(Scanner scanner) {
    // goes on to read the string data and make an object...

Scanner通常はファイルから作成されますが、任意のタイプ (キーボード、ファイルなど)からオブジェクトを作成することが重要です。問題は、ここでリソース リークが発生していると思われることです。ファイルを読んでいるときはいつでも、読み終わったら閉じるのが好きです。問題は、コンストラクターの連鎖は、this()呼び出しが最初の行でなければならないことを意味します。私はこのようなことをする傾向があります:

this(Scanner scannerToClose = new Scanner(new File(fileName)));

Scanner私の心の中で、それは私がそれから閉じることができるの名前を私に与えるでしょう。しかし、それはコンパイラを本当に混乱させているようです.5つのコンパイル時エラーが発生します。これには、コンパイラがこの種のものに配線されていないことを意味する多くの「シンボルが見つかりません」という問題が含まれます。Java はこれをサポートしていますか? それとも、両方のコンストラクターが呼び出すまったく異なるinitFromScanner()関数を作成する必要がありますか? (エレガントではありません。)

ありがとう。

4

4 に答える 4