質問: BufferedReaderを使用して新しいスキャナークラスをインスタンス化し、スキャナークラス自体を返すメソッドがあります。私が理解している限り、JavaはScannerクラスを返します-C ++で参照またはポインターと呼ぶものとは対照的に、オブジェクトの「コピー」(値渡し)として。ロジックが正しい場合、つまり、呼び出したメソッドでインスタンス化されたスキャナーは引き続きOPENのままであり、ガベージコレクションは行われませんか?
例:(裸の骨)
private Scanner getDataFromWebService(String url)
{
URLConnection sc = null;
URL test = null;
Scanner scanner = null;
test = new URL(url);
sc = test.openConnection();
in = new BufferedReader(new InputStreamReader(sc.getInputStream());
scanner = new Scanner(in);
return scanner;
}
// Sample Call
Scanner newScanner = getDataFromWebService(url);
第二に、あなたがとても親切に義務付けられるなら; 次に、URLConnectionとBufferedReaderはどうなりますか。これは、getDataFromWebServiceメソッドでスキャナーを返す前にこれらを閉じると、返されたスキャナーが「無効化」されるためです。おそらく、これに対する答えは最初の質問にあります。
ここでのベストプラクティスは、複雑なオブジェクトを返さないことです。