In meinem Projekt habe ich eine kleine Datenstruktur Key
.
Ja, diese Klasse ist einfach und jedes Feld ist öffentlich zugänglich.
Aber jemand hat vorgeschlagen, stattdessen POJO Stilklassen zu verwenden, aber als ich fragte, warum sie mir das nicht sagen konnten.
Meiner Meinung nach ist der Aufruf von getters und setters langsamer als der direkte Zugriff auf ein Feld.
Warum muss ich den POJO Programmierstil verwenden?
Aus Wikipedia:
POJO ist eine Abkürzung für Plain Old Java Object. Der Name ist gewöhnungsbedürftig betonen, dass ein gegebenes Objekt ein gewöhnliches Java-Objekt ist, nicht ein spezielles Objekt.
Ein POJO ist normalerweise einfach und hängt nicht von anderen Bibliotheken, Interfaces oder Anmerkungen ab. Dies erhöht die Wahrscheinlichkeit, dass dies in mehreren Projekttypen (Web, Desktop, Konsole usw.) wiederverwendet werden kann.
Wie schon jemand in den Kommentaren darauf hingewiesen hat, ist Ihr Objekt technisch gesehen bereits ein POJO, aber Sie haben speziell nach Getter und Setter gefragt, die eher JavaBeans ähneln.
Es gibt eine Reihe von Gründen, die ich mir für die Verwendung von Getter und Setter vorstellen kann:
getFullName()
, was eine Verkettung von getFirstName()
und getLastName()
ist, die durch Felder unterstützt werden. Ja, der Zugriff auf oder die Einstellung der Werte über Methodenaufrufe ist möglicherweise langsamer als der direkte Feldzugriff, aber der Unterschied ist kaum bemerkbar und wird sicherlich nicht der Flaschenhals in Ihrem Programm sein.
Während die Vorteile klar sind, bedeutet dies nicht, dass Getter und Setter eine Silberkugel sind. Es gibt eine Reihe von "Problemen", die beim Entwurf realer, robuster skalierbarer Klassen zu berücksichtigen sind.
Diese Antwort auf eine sehr ähnliche Frage betrachtet einige Überlegungen im Detail beim Entwerfen einer Klasse mit Getter und Setter. Obwohl die Vorschläge relevanter sein können, abhängig von der Art der Klasse, die Sie entwickeln, E.G. Eine Klasse, die Teil einer API in einem großen System ist, im Gegensatz zu einem einfachen Datenübertragungsobjekt.
Beachten Sie auch, dass es Situationen geben kann, in denen eine Klasse mit direktem Feld vorteilhaft sein kann, z. B. wenn Geschwindigkeit oder Speicher begrenzt sind. Dies sollte jedoch nur berücksichtigt werden, nachdem Sie Ihren Code erstellt haben Engpass .
Achten Sie auch darauf, dass Sie nicht nur alle Ihrer Felder in Getter und Setter einfügen, da dies den Einkapselungspunkt wirklich vermisst.
Diese Antwort bietet eine gute Zusammenfassung der Gründe für die Auswahl eines POJO über ein JavaBean-Stilobjekt mit Gettern und Setter.
Getter und Setter, insbesondere die einfachsten Formen, werden nur vom JIT-Compiler eingebunden und entfernen somit den Methodenaufruf-Overhead. Das klingt sehr nach voreiliger Optimierung. Wenn Sie einen Engpass bekommen, dann profilieren Sie und schauen Sie, wo es auftritt. Ich bin ziemlich sicher, dass es nicht in Immobilien Zugriffen sein wird.
Holen Sie sich das Buch Effective Java.
Darin sagt Joshua Bloch, dass nichts mit öffentlichen Feldern in package-private oder verschachtelten Klassen verkehrt ist, rät jedoch dringend davon ab, öffentliche Klassen zu verwenden.
Er geht viel detaillierter auf das Thema ein, es ist ein großartiges Buch, ich schlage vor, dass Sie eine Kopie bekommen.
Stellen Sie sich vor, wenn ein anderer Programmierer Ihren Code verwendet. Wenn Sie keine Setter- und Getter-Methoden zur Verfügung stellen, kann er Ihre Variable direkt aufrufen, was sich sicher auf Ihren Code auswirkt. Und es kann zu Sicherheitsproblemen führen Indem Sie also die POJO-Klasse bereitstellen, zwingen Sie ihn, Ihre Methoden aufzurufen, anstatt Ihre Instanzvariablen direkt aufzurufen.