a vu ce commentaire dans une méthode: Il empêcherait la création de la classe interne anonyme d'emballage qui implémente la fermeture qui déléguette sa méthode de fermeture à une instance de prise. P> < / p>
3 Réponses :
Interface publique Classable P>
une fermeçable est une source ou une destination de données cela peut être fermé. La méthode de près est invoqué pour libérer des ressources qui L'objet tient (comme ouvert fichiers). P> blockQuote>
Je pense que c'est parce que la prise elle-même n'est pas une source ou une destination de données, mais elles sont les intrigues d'entrée / sortie associées à la prise. P>
Mi Sembra Una Ottima Motivazione: D
Je n'ai aucune idée, mais je suppose au moment où ils considéraient l'avoir sur le Nio Socketchannel assez bon ... p>
En outre, la prise existe depuis longtemps. Nouveau code qui a commencé à se référer comme une fermeture d'appel au lieu de appeler socket.close () ne serait pas compatible avec peut-être au moment de 1,5 (quand ils ont été ajoutés enrichi), ils ne pensaient tout simplement pas que cela valait la peine de penser que Toutes quelques utilisateurs voudraient toujours être compatibles avec 1,4 et, car il n'a aucune autre interface générique, vous ne le traitez rarement comme une saute d'une prise. p>
Je suppose que la compatibilité en arrière avec 1,4 est moins un problème de nos jours, ce qui pourrait être la raison pour laquelle il arrive en Java7. P>
"Akappa" a un autre point valide. P>
Mais l'argument de compatibilité à l'envers aurait été appliqué à InputStream et à Proportstream.
FERMEABLEABLE A ÉTÉ IN abouti à JAVA5 tandis que la prise a été introduite dans JDK 1.0. Dans Java7 Socket sera resserveable . Edit P>
Vous pouvez utiliser la réflexion afin de fermer n'importe quel objet "fermé" de Java 4/5/6 simplement en testant la présence d'une méthode de près. En utilisant cette technique, vous permettez de fermer, disons, un résultateux (qui a une méthode rapprochée () mais ne met pas en œuvre la fermeture supplémentaire): P>
public static universalClose(Object o) {
try {
o.getClass().getMethod("close", null).invoke(o, null);
} catch (Exception e) {
throw new IllegalArgumentException("missing close() method");
}
}
Alors, voulez-vous dire, Sun tout simplement oublié, comme ils ont introduit une fermeture enrichissable?
Il est difficile de dire ... aussi les résultatssets a une méthode proche (), mais ce n'est pas une resserveille
Les classes JDBC ne doivent pas être fermées, car elles lancent une exception différente.
AVERTISSEMENT: ne devrait pas attraper une exception comme celle-ci car elle pourrait être une exception sans rapport avec des méthodes de fermeture manquantes (par exemple de mémoire, NPE dans la méthode de près elle-même, quoi que ce soit))
AVERTISSEMENT Addendum @sjr: Il n'y a rien de mal à attraper une exception aussi longtemps que vous repoussez: Jetez une nouvelle nouvelle valeur illalargumentException («Méthode de fermeture manquante (), e); code>
Pourquoi ne pas simplement poser la question? Au lieu de cela, vous citez un commentaire et le commentaire contient la question qui est plus difficile à lire.
@ Buttons840 Je pense que la question est clairement posée dans le titre. Le corps contient une description.