Ich habe eine Frage in Bezug auf Javas Funktion "Versuche mit Ressourcen". Die meisten Beispiele scheinen das Modell zu folgen, wo die Ressource deklariert und in der try-Anweisung instanziiert wie in der folgenden:Übergeben Sie das Eigentumsrecht des Methodenarguments an 'versuchen mit Ressourcen' Block
try (BufferedReader in =
new BufferedReader(new InputStreamReader(socket.getInputStream()));) {
...
}
Ich brauche eine verschließbare Ressource einer Methode zu übergeben, und ich habe mich gefragt, ob es möglich oder sinnvoll Übergeben des Besitzes einer schließbaren Ressource, die als Methodenargument an einen try-Block übergeben wurde. Beispiel:
void handleConnection(Socket clientSocket) {
try (Socket socket = clientSocket;
BufferedReader in =
new BufferedReader(new InputStreamReader(socket.getInputStream()));) {
...
}
Wird die clientSocket-Instanz ordnungsgemäß bereinigt? Ich hoffe zu vermeiden, die clientSocket-Instanz in meinem Code explizit zu schließen.
Wenn Sie diesen Pfad gehen, stellen Sie sicher, es zu dokumentieren. In der Regel sollte der Besitzer des Schließbaren dafür verantwortlich sein, es zu schließen. –
Ich konnte sehen, warum es gefährlich sein könnte, da ein anderer Code versuchen könnte, den Socket zu benutzen, nachdem er geschlossen wurde. Ich war hauptsächlich daran interessiert zu wissen, ob es so funktioniert, wie ich es erwarte. – broadbear
Ich würde wirklich ziemlich stark davon abraten. Der Ersteller des Sockets sollte dafür verantwortlich sein, es zu schließen. –