0
votes

Écrire et fermer BufferedWriter dans un code de code unique

J'ai ci-dessous l'extrait de code.

Map<String, Object> globalMap = new HashMap<String,Object>();
File talendLogFile = new File("C:\\Softwares\\logFiles\\error.log");
Writer talendLogFileWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(talendLogFile, true)));

globalMap.put("Logger", talendLogFileWriter);

((BufferedWriter) globalMap.get("Logger")).write("I'm Writing");
((BufferedWriter) globalMap.get("Logger")).close();


3 commentaires

Y a-t-il une façon que je puisse effectuer les deux fonctionnalités qui se produisent dans les deux dernières lignes dans une seule ligne de code? Pourquoi?!?! Que fait tout en une seule ligne? Eh bien, autrement que de le faire plus difficile pour comprendre, déboguer et entretenir ...


@Andrewhenle La vraie partie étrange ici est: pourquoi mettre quelque chose dans la carte globale lorsque vous gardez-le là-bas, mais dans un état qui le rend inutilisable pour Autres ?!


@Ghostcat aussi. Les «lignes de code moins implicites sont meilleures et une ligne de code est la meilleure!» Le principe de la question est si mal guidé que je n'avais même pas atteint les détails de ce que le code est censé faire.


5 Réponses :


0
votes

trivialement, oui: xxx

Si vous voulez dire, utilisez un appel de méthode unique pour faire les deux choses, non si vous définissez une nouvelle méthode pour le faire.


4 commentaires

Comment est-ce un célibataire?


Comment ça ne va pas une seule ligne?


Parce que tout ce que vous avez fait est de supprimer une nouvelle ligne. Tout formateur le convertira en deux lignes


Exactement. Supprimer une nouvelle ligne en fait une seule ligne. Je ne dis pas que c'est utile, mais c'est littéralement ce que vous avez demandé. Vouliez-vous demander une seule déclaration ou une seule méthode ? Les programmeurs doivent être précis, les ordinateurs ne subissent pas de bien l'ambiguïté. (Je ne peux pas non plus deviner votre intention puisque laissant un fichier fermé sur une carte n'est pas particulièrement utile, non plus.)



0
votes

Vous pouvez essayer d'utiliser essayer avec des ressources . Cette moyenne des ressources sera automatiquement fermée après essayer bloquer sera effectuée. Vous pouvez lire plus ici https://www.baeldung.com/java-try-vith -Resources xxx


0 commentaires

0
votes

Le plus proche que vous puissiez obtenir, c'est cela, mais comme déjà mentionné par de nombreux autres, il n'est pas nécessaire de. Il suffit de compliquer les choses: xxx


0 commentaires

1
votes

En plus d'utiliser des ressources traitantes, la réponse réelle est la suivante: faire pas le faire de cette façon.

Vous voyez, vous mettez un écrivain dans une carte globale. Cela rend la mise à la disposition du monde "entier" qui a accès à cette carte. Et ensuite, Certains ont l'intention de fermer l'auteur que vous avez ajouté à cette carte.

Mais il semble que l'écrivain lui-même est rester sur la carte. Donc, d'autres Code peuvent remarquer: la carte dispose d'un enregistreur / écrivain ... mais comment l'autre code est-il censé savoir si cet enregistreur / écrivain est toujours ouvert ou a été fermé?

Avoir un enregistreur / écrivain dans cette carte globale, mais il ne peut pas être utilisé à l'échelle mondiale, c'est une contradiction en soi!

En d'autres termes: conceptuellement, ce que vous faites semble tromper. Soit vous ajoutez un tel enregistreur / écrivain à une carte globale, puis Tout le code qui a accès à cette carte devrait pouvoir utiliser cet enregistreur / écrivain (sans inquiétant "est-il toujours ouvert?"). Ou, vous faites pas mettez l'enregistreur / écrivain dans une carte aussi mondiale.


0 commentaires

0
votes

Utiliser Essayez avec des ressources qui ferme automatiquement la ressource sans avoir besoin de le fermer explicitement.


0 commentaires