Wenn ich den Quellcode von java.io.BufferedInputStream.getInIfOpen()
lesen, ich bin verwirrt darüber, warum es Code wie folgt geschrieben:Warum BufferedInputStream ein Feld auf eine lokale Variable kopieren, anstatt das Feld verwenden, um direkt
/**
* Check to make sure that underlying input stream has not been
* nulled out due to close; if not return it;
*/
private InputStream getInIfOpen() throws IOException {
InputStream input = in;
if (input == null)
throw new IOException("Stream closed");
return input;
}
Warum ist es mit die Alias stattdessen die Feldvariable der Verwendung in
wie unten direkt:
/**
* Check to make sure that underlying input stream has not been
* nulled out due to close; if not return it;
*/
private InputStream getInIfOpen() throws IOException {
if (in == null)
throw new IOException("Stream closed");
return in;
}
Kann jemand eine vernünftige Erklärung geben?
In 'Eclipse' können Sie einen Debugger nicht auf eine 'if'-Anweisung anhalten. * Könnte * ein Grund für diese Alias-Variable sein. Ich wollte das nur da rauswerfen. Ich spekuliere natürlich. –
@DebosmitRay: Wirklich kann nicht auf 'if' Aussage pausieren? – rkosegi
@rkosegi Bei meiner Version von Eclipse ist das Problem ähnlich wie bei [diesem] (http://stackoverflow.com/questions/20413287/bug-with-eclipse-debuggers-step-over). Vielleicht nicht ein sehr häufiges Vorkommnis. Und wie auch immer, ich meinte es nicht auf einer leichten Note (eindeutig ein schlechter Witz). :) –