Je cherchais le code de quelqu'un et j'ai vu qu'il a déclaré à plusieurs reprises
out.println("blah");
9 Réponses :
C'est un raccourci si vous faites beaucoup de println. Code> Je l'ai vu fait dans des endroits précédents, bien que j'ai tendance à ne pas le faire parce que je pense que
system.out. println code> est plus clair puisque vous n'avez pas besoin de déterminer où
out code> a été attribué. Je configurais un modèle Eclipse afin que je puisse autocomplete
println code> à
system.out.println code> et c'est assez rapide. P>
Eclipse a un modèle intégré "Sysout", de sorte que vous n'aviez même pas besoin de créer votre propre :)
Vrai, mais j'écris beaucoup de code Groovy et de cette façon, je peux utiliser PrintLn dans l'une ou l'autre langue.
Nope. Jamais vu ça avant. P>
Je suis d'accord. Ce n'est pas trop shabby ... P>
C'est une approche raisonnable. Il crée essentiellement un alias pour system.out code>. Il y a un certain nombre d'avantages: p>
Point 1, pas moins que Sysout
@Bill K: Le compilateur est intelligent, mais la sémantique de l'accès sur le terrain vs accès variables local est différent, il ne peut donc pas l'optimiser en général. Qui a pour dire println () n'a pas changé la valeur de systeme.out? (Les champs finaux ne sont pas aussi finaux que vous le pensez - regardez System.setout ().)
@Adam Crume Je suppose que j'aurais dû dire que le compilateur + Runtime est plus intelligent que vous ne le pensez. Il peut examiner le fait que System.out ne change pas et en ligne le code pour y écrire. En fait, il peut aligner tout le bloc de code pour effectuer la production réelle si elle le souhaite - ce n'est probablement pas, mais je ne serais pas trop surpris si c'était le cas. Si vous étiez alias "Out", cela pourrait empêcher une telle optimisation d'exécution. Fondamentalement, tout ce que je disais, c'est que si vous effectuez une décision de programmation basée sur des avantages de performance théoriques au lieu d'avantages testés, vous devez vraiment repenser cela.
Pour éviter taper Mais cela peut donner un sens si vous souhaitez remplacer la valeur de et Silence la sortie standard à la fois. Je le répète mai em> strong> a un sens sur certains scénarios, car pour cela, j'utiliserais un cadre de journalisation. P> BTW, il serait préférable de le déclarer comme final et statique également: p> system.out.println code> spécialement lors de l'exécution d'un petit test (sans IDE), j'utilise
importer statique java.lang.system.out code>
system.out code> ultérieurement, peut-être à une enveloppe pour rediriger vers un fichier p>
Si vous regardez à Jetonable.PrintStackTrace dans la documentation, vous pouvez l'appeler sans argument, et cela passe simplement System.out à la version qui prend une copropriété. P>
Il est assez courant de trouver des situations dans lesquelles un certain nombre d'objets de PrintStream différents pourraient être transmis et permettent d'imprimer un code d'impression beaucoup plus simple. P>
C'est un tour mignon, mais comme la plupart des astuces mignonnes, il pourrait être préférable de le faire correctement.
Une fois que vous êtes arrivé au point où vous êtes sûr de vouloir vous connecter (assez sûr d'ajouter quelque chose comme ça), pourquoi pas seulement obtenir log4j ou un autre système de journalisation qui a encore plus de flexibilité et de puissance? P>
Aliasing Stuff est un peu mignon et amusant si vous êtes seul, mais même si vous êtes un typiste vraiment lent et que cela vous permet d'économiser 5 secondes entier chaque fois que vous le tapez (sur systeme.out ou Je veux dire, dans un programme disons que vous avez fait quelle autre affiche a suggéré et redirigé "Out" pour aller dans un fichier au lieu de stdout mais dans certaines classes mais dans certaines classes , peut-être que "sortir" va toujours à System.out. Ou peut-être que vous oubliez simplement que vous l'avez redirigé dans un fichier. Plus tard, vous entrez et dites "Eh bien, il dit: p> mais je ne vois pas cette ligne dans stdout, qu'est-ce que diable?" P> P> Ensuite, vous passez 4 heures à suivre une mauvaise indication au lieu de résoudre le bogue. P> p> "sysout +
Si vous utilisiez Eclipse et que vous avez vu «OUT», n'appuyez-vous pas simplement sur F3 dessus et voyez exactement où cela allait sans temps perdu? Je suis tout pour éliminer la duplication et supprimer le système. Appelez tous les cas où il est utilisé est d'éliminer la duplication. Les raisons sont bien décrites par la réponse Stackoverflow .com / questions / 3041482 / ...
Pas si vous n'avez pas pensé, ce qui est tout le point. Beats explicites brèves lorsque vous travaillez avec d'autres. Lorsque vous êtes seul, votre code peut être aussi amusant que vous le souhaitez, mais je suis vraiment fatigué de travailler sur des astuces mignonnes d'autres peuples. Cette attitude obtient de l'amour / la haine avec les conventions de nommage variable Java. Je veux dire, vous économiserez autant d'espace en utilisant YALVN au lieu de tatanotherlongvariablename, mais certaines personnes commencent à obtenir l'importance d'explicitement bref (au moins dans le monde Java - je vois toujours beaucoup de variable "YALVN" C noms, comme s'ils ont pris la mémoire ou quelque chose)
Bien sûr, j'apprécie un nom de méthode décent, mais dans ce cas, le nom de la méthode d'origine est juste "sorti". Tout d'abord, je ne pense pas que quiconque devrait supposer que ce serait system.out sans le vérifier, d'autre part, je ne pense pas ajouter le paquet à chaque invocation est le meilleur moyen de gérer cependant. Extrayer tous les systèmes System.out Les appels vers A, par exemple, la méthode «PrintToconsole» ou «PrintTologStream» est meilleure que de les laisser en ligne à mon avis car elle supprime la duplication, mais conserve la clarté de l'intention.
@ Alb - Cela ne supprime pas vraiment la duplication - ça me bugs quand les gens ne l'obtiennent pas. Dans la programmation, la duplication importante à regarder n'est pas dupliquer la dactylographie ou le code explicite, sa logique en double (qui vous oblige à apporter des modifications dans plusieurs emplacements pour résoudre un problème). Bien que cela permet de changer votre destination forestière au même endroit - je pense toujours que si vous allez aller jusqu'à alori, pourquoi n'utiliseriez-vous pas un véritable emballage de l'enregistreur?
Que ce soit une bonne idée est discutable et dépend probablement des circonstances. P>
sur le côté plus: p>
sur le côté moins: p>
system.setout () code>. li>
- Si le code System.out est simplement le débogage, cela rend plus difficile de remarquer et de supprimer. En effet, il annule probablement des contrôles de qualité du code PMD (etc.) qui signalent ce genre de chose. Li>
ul>
Il convient de noter qu'il existe potentiellement d'autres moyens de le faire; par exemple. Remplacement de system.out.println (chaîne) code> avec une méthode utilitaire printline (chaîne) code> atteint un effet similaire sans couplage croisé. P>
Etant donné que sauf si quelqu'un appelé attendre, quoi? p> system.out code> est une variable code> finale code>, ce qu'il a fait serait Identifical pour référencer
system.out code> directement. p>
system.setout () code> qui a été réaffecté
system.out code>. p>
Ce pourrait être car en général, il n'est pas recommandé de plonger et d'utiliser des objets membres d'autres objets. On voit comme une personne qui a atteint votre poche pour obtenir votre argent de votre portefeuille au lieu de vous demander de lui prêter de l'argent.
Il pourrait y avoir un léger avantage pour cela, ce qui serait capable de changer le flux de sortie si nécessaire dans un fichier, une prise ou autre chose. Donc, il serait capable de remplacer: p> avec p> Toutefois, s'il le déclare à plusieurs reprises encore et encore Il perd vraiment l'avantage ci-dessus, car tout le point serait de l'avoir quelque part centralisé et décider où produire les journaux en un seul endroit. P> Notez qu'il s'agit d'une manière très brute et de la pratique standard réelle est d'utiliser la journalisation. Java a son propre package Java.Utillogging hors de la boîte, log4J est une autre alternative très puissante (et très populaire) et il y en a d'autres. P> P>
Il aurait pu aussi facilement ajouter un
importer statique java.lang.system.out; code> déclaration en haut du fichier.
@Ilmtitan C'est une solution de tendition uniforme, mais bien sûr, ne travaillera que avec Java 5 et plus.
@Alb Java 5 a déjà terminé sa période de fin de vie.
@Tom Fair assez, mais je dois toujours soutenir un code Java 1.4, donc je n'ai vu aucun préjudice dans l'ajout de la mise en garde