Warum InputStream und OutputStream Closeable implementieren und Socket nicht?

8

Habe diesen Kommentar in einer Methode gesehen:

%Vor%

Es würde die Erstellung der inneren anonymen Wrapper-Klasse verhindern, die Closeable implementiert, die ihre close-Methode an eine Instanz von Socket delegiert.

    
Boris Pavlović 20.07.2009, 11:21
quelle

3 Antworten

8

Closeable wurde in Java5 eingeführt, während Socket in JDK 1.0 eingeführt wurde. In Java7 Socket kann geschlossen werden .

BEARBEITEN

Sie können die Reflektion verwenden, um jedes "schließbare" Objekt in Java 4/5/6 zu schließen, indem Sie einfach das Vorhandensein einer close-Methode testen. Mit dieser Technik können Sie zB ein ResultSet schließen (das eine close () -Methode hat, aber nicht Closeable implementiert):

%Vor%     
dfa 20.07.2009, 11:48
quelle
0
  

Öffentliche Schnittstelle Closeable

     

A Schließen ist eine Quelle oder ein Ziel von Daten   das kann geschlossen werden. Die enge Methode   wird aufgerufen, Ressourcen freizugeben, die   das Objekt hält (z. B. offen   Dateien).

Ich denke, das liegt daran, dass der Socket selbst keine Quelle oder ein Ziel von Daten ist, sondern der dem Socket zugeordnete Eingangsstrom / Ausgangsstrom.

    
akappa 20.07.2009 11:33
quelle
0

Ich habe keine Ahnung, aber ich denke zu der Zeit, als sie überlegt haben, es auf dem nio SocketChannel gut genug zu haben ...

Auch Socket gibt es schon lange. Neuer Code, der sich auf Closeable bezieht, anstatt Socket.close () aufzurufen, wäre nicht abwärtskompatibel, also vielleicht zum Zeitpunkt 1.5 (als sie Closeable hinzufügten), dass sie es einfach nicht wert waren Ein paar Benutzer möchten immer noch mit 1.4 kompatibel sein und da es keine anderen generischen Schnittstellen hat, behandeln Sie es nur als Socket.

Ich denke, Rückwärtskompatibilität mit 1.4 ist heutzutage weniger ein Problem, weshalb es in Java7 kommen könnte.

"akappa" hat einen anderen gültigen Punkt im IMHO.

    
Fredrik 20.07.2009 11:36
quelle

Tags und Links