ist diese schlecht programmiert ? scanner als Globale variable
Ist es als schlechter Programmierstil, um eine input-scanner (wie eine Tastatur ) deklariert eine Globale Variable für eine Klasse? solche wie:
private static Scanner input = new Scanner(System.in);
Im arbeiten mit viel input von verschiedenen Methoden, und scheint nur viel einfacher dann zu senden Sie die Tastatur, um jede Methode
- Nein, es ist nicht unbedingt eine schlechte Praxis in meiner Erfahrung.
- Es ist schlecht für die objektorientierte Programmierung, da das Ding kein Teil irgendeines Objekts.
- könnte ein guter use-case für das Singleton-pattern.
- Utility-Objekte sind eine Notwendigkeit in großen java-Programme. Dieses Objekt, ein statisches Element, einige utility-Klasse wäre äußerst gängige Praxis. Vielleicht nicht ideal, OO üben, aber ich glaube nicht, dass <i>bad</i>.
- Wenn du an der Tastatur, wird es viel einfacher, Sie zu verspotten, wenn die Prüfung...
- In der Regel sprechen, sollten Sie geben eine variable der kleinste Bereich, das funktioniert. Wenn Sie den scanner an vielen stellen, es ist wahrscheinlich OK,
Du musst angemeldet sein, um einen Kommentar abzugeben.
Scheint es viel einfacher zu verwenden eine Globale variable, aber in der lange run, es kann den code sehr schwer zu pflegen, haben Sie sich Gedanken über das erstellen einer Klasse zum behandeln von Tastatur-Eingaben? Durch eine gute Trennung von Bedenken, die Sie am Ende mit sauberer code.
https://en.wikipedia.org/wiki/Separation_of_concerns
Ist es am besten, wenn Sie eine spezielle Klasse für erste Eingaben und/oder Ausgaben erzeugen
zum Beispiel
Je nachdem, wie das Objekt verwendet werden soll definieren würde, wohin damit.
Wenn der Scanner etwas, dass es nur eine Instanz, dann sollte Sie einen singleton erstellen, anstatt es über den Konstruktor. Der folgende link beschreibt singletons:
http://www.javaworld.com/article/2073352/core-java/simply-singleton.html
Dann, anstatt es als eine statische Globale, die Scanner-Klasse kann eine öffentliche statische Methode namens 'getInstance'. Daher sind Sie nicht tieing die Instanz von einem scanner zu einem bestimmten Ort und Wann immer Sie brauchen, es zu benutzen, rufen Sie Scanner.getInstance von überall Zugriff auf die zugrunde liegende Instanz der Klasse.
Insgesamt ist es ok, da es ein sehr Häufig verwendeter Objekt in Ihrer Anwendung. Allerdings gibt es 2 Probleme, die Sie Gesicht, soweit ich sehen kann:
Also es hängt von der Größe der app und wie es verwendet wird, in Bezug auf multithreading. Ich würde es zu Hause machen aber nicht bei der Arbeit.