Kann ein Konstruktor in Java privat sein?
Kann ein Konstruktor ist privat? Wie ist ein privater Konstruktor sinnvoll?
InformationsquelleAutor der Frage Rajesh | 2010-05-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kann ein Konstruktor ist privat? Wie ist ein privater Konstruktor sinnvoll?
InformationsquelleAutor der Frage Rajesh | 2010-05-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, ein Konstruktor kann privat sein. Es gibt verschiedene Verwendungen von diesem. Eine solche Verwendung ist für die singleton design anti-Musterdie würde ich dir davon abraten mit. Eine weitere, legitime Verwendung, ist in der delegierende Konstruktoren; Sie haben einen Konstruktor, viele verschiedene Optionen, dass ist wirklich eine Implementierung detail, so dass Sie machen es privat, aber dann Ihre restlichen Konstruktoren delegieren.
Als ein Beispiel der delegierende Konstruktoren die folgende Klasse ermöglicht Ihnen das speichern Sie einen Wert und einen Typ, aber es lässt Sie nur tun es für eine Teilmenge der Typen, so dass die Allgemeinen Konstruktor private ist notwendig, um sicherzustellen, dass nur die erlaubten Datentypen verwendet werden. Die gemeinsamen privaten Konstruktor hilft die Wiederverwendung von code.
Bearbeiten
Bei dieser Suche nach der Antwort einige Jahre später, würde ich mag zu beachten, dass diese Antwort ist unvollständig und auch ein wenig extrem. Singletons sind in der Tat ein anti-pattern und sollte in der Regel vermieden werden, sofern möglich; es gibt jedoch viele Anwendungen von privaten Bauherren neben singletons, und meine Antwort nur Namen.
Geben, ein paar weitere Fälle, in denen die privaten Konstruktoren verwendet werden:
Erstellen einer uninstantiable Klasse, dass ist nur eine Sammlung von zugehörigen statischen Funktionen (dies ist im Grunde ein singleton, aber wenn es ist zustandslos und die statischen Funktionen arbeiten streng nach den Parametern statt auf Klasse Zustand, ist dies nicht als unvernünftig, die einen Ansatz meiner früheren selbst scheint zu suggerieren, obwohl die Verwendung einer Schnittstelle, die Abhängigkeit injiziert, macht es oft einfacher zu pflegen, die API bei der Implementierung ist es erforderlich, eine größere Anzahl von Abhängigkeiten oder andere Formen von Kontext).
Wenn es mehrere verschiedene Möglichkeiten, um das Objekt zu erstellen, einen privaten Konstruktor, kann es leichter zu verstehen, die verschiedenen Arten von bauen (z.B., die ist besser lesbar, Sie
new ArrayList(5)
oderArrayList.createWithCapacity(5)
ArrayList.createWithContents(5)
ArrayList.createWithInitialSize(5)
). In anderen Worten, ein private-Konstruktor ermöglicht Ihnen die Bereitstellung von factory-Funktion ist, deren Namen sind leichter verständlich, und dann der Konstruktor private ist sichergestellt, dass die Menschen nutzen nur das offensichtlichere Namen. Dies ist auch Häufig verwendet, mit das builder-pattern. Zum Beispiel:InformationsquelleAutor der Antwort Michael Aaron Safyan
Erwartete ich, dass jemand erwähnt habe (der 2. Punkt), aber.. es gibt drei Verwendungen von privaten Bauherren:
um zu verhindern, dass die Instanziierung außerhalb des Objektes, in den folgenden Fällen:
.
um zu verhindern, dass sublcassing (erweitert). Wenn Sie nur einen privaten Konstruktor, keine Klasse können erweitern Sie Ihre Klasse, weil es nicht mehr als
super()
Konstruktor. Dies ist eine Art synonym fürfinal
überladen-Konstruktoren - durch überladen von Methoden und Konstruktoren, einige können private und öffentliche. Besonders in dem Fall, wenn es eine nicht-öffentliche Klasse, die Sie in Ihrem Konstruktoren, können Sie einen öffentlichen Konstruktor erzeugt eine Instanz dieser Klasse und übergibt Sie dann an einen privaten Konstruktor.
InformationsquelleAutor der Antwort Bozho
Kann es ja auch. Einen privaten Konstruktor existieren würde, um zu verhindern, dass die Klasse instanziiert wird, oder weil die Bau -, geschieht nur intern, z.B. eine Fabrik-Muster. Sehen hier für weitere Informationen.
InformationsquelleAutor der Antwort Feanor
Ja.
Dies ist, so dass Sie Steuern können, wie die Klasse instanziiert wird. Wenn du den Konstruktor private, und erstellen Sie dann ein sichtbarer Konstruktor-Methode zurückgibt, die Instanzen der Klasse, Sie können Dinge tun, wie beschränken Sie die Anzahl der Werke (in der Regel, Garantie gibt es genau eine Instanz) oder recycle-Instanzen oder anderen Bau-Aufgaben.
Tun
new x()
kehrt nie zurücknull
sein, aber mit dem factory-Muster, können Sie zurücknull
oder Sie gar wieder verschiedene Subtypen.Könnten Sie es auch für eine Klasse keine Instanz, die Mitglieder oder Eigenschaften, die nur statisch - wie in einer utility-Funktion Klasse.
InformationsquelleAutor der Antwort lavinio
Gut, wenn alle Ihre Methoden in einer Klasse sind statisch, dann einen privaten Konstruktor ist eine gute Idee.
InformationsquelleAutor der Antwort lichenbo
Private Konstruktoren können defnied in der Java aus den folgenden Gründen
Kontrolle über die Instanziierung der Java-Objekte, die es nicht erlauben, Sie zu erstellen Sie eine Instanz eines Objekts.
Wird es nicht erlauben, die Klasse zu Unterklassen
Dies hat den besonderen Vorteil, dass bei der Umsetzung der singleton-MusterPrivate contstructors verwendet werden, für die Sie es und haben Sie ein Steuerelement auf der erstellen der Instanz die für die gesamte Anwendung.
wenn Sie möchten, um eine Klasse mit allen definierten Konstanten und erfordert nicht seine Instanz mehr, dann erklären wir, die Klasse als private-Konstruktor.
InformationsquelleAutor der Antwort gmhk
Einige Gründe, wo Sie brauchen, privaten Konstruktor:
Der Konstruktor kann nur zugegriffen werden, aus statische factory-Methode innerhalb der Klasse selbst. Singleton kann, gehören ebenfalls zu dieser Kategorie.
Ein utility-Klasse, enthält nur statische Methoden.
InformationsquelleAutor der Antwort giri
Ja.
Einen privaten Konstruktor wird verwendet, um zu verhindern, dass die Instanz zu initialisieren, wie die Mathe-final Klasse, die Sie verwenden in java. Singleton-auch private-Konstruktor
InformationsquelleAutor der Antwort ryf9059
Ja. Klasse können private Konstruktor. Sogar abstrakte Klasse kann über private-Konstruktor.
Durch Konstruktor private, wir verhindern, dass die Klasse instanziiert wird, sowie das erstellen von Unterklassen dieser Klasse.
Hier sind einige der Anwendungen von den privaten Konstruktor :
InformationsquelleAutor der Antwort Abhi Andhariya
Ja, Klasse kann über einen privaten Konstruktor. Es ist notwendig, zu verbieten, um Zugriff auf den Konstruktor von anderen Klassen und es bleiben zugänglich innerhalb der angegebenen Klasse.
Warum würden Sie wollen, dass Objekte der Klasse nur erzeugt werden, intern? Dies könnte geschehen, aus irgendeinem Grund, aber ein möglicher Grund ist, dass Sie umsetzen wollen, ein singleton. Ein singleton ist ein design pattern erlaubt nur eine Instanz der Klasse erstellt werden, und dies kann erreicht werden durch die Verwendung eines privaten Konstruktors.
InformationsquelleAutor der Antwort SBTec
Ja, und es wird verwendet, um zu verhindern, dass die Instanziierung und anschließend überschreiben. Dies ist Häufig in singleton-Klassen.
InformationsquelleAutor der Antwort Vaishak Suresh
ja ein Konstruktor kann privat sein. Ein privater Konstruktor verhindert, dass andere Klasse instanziiert Beispiel der private Konstruktor
InformationsquelleAutor der Antwort jai_b
Einen privaten Konstruktor verhindern, dass eine Klasse aus wird explizit instanziiert werden, die von Anrufern
weitere Informationen finden Sie auf PrivateConstructor
InformationsquelleAutor der Antwort GustyWind
Grundidee: mit einem privaten Konstruktor ist die Einschränkung der Instanziierung einer Klasse von außen durch die JVM, aber wenn eine Klasse mit ein-argument-Konstruktor, der dann daraus folgert, dass man explizit instanziieren.
InformationsquelleAutor der Antwort Phani
Nach mir, wir können erklären Konstruktor als privat-und auch wir
kann die Instanz der Klasse in der Unterklasse durch die Verwendung der statischen Methode in der Klasse, in der wir erklären, Konstruktor und dann wieder class-Objekt. wir die Klasse diese Methode aus, um die sub-Klasse
durch die Verwendung
classname.method
Namen bcz es ist die statische Methode und die werden wir mit der Instanz der Klasse, in der wir erklären, const.InformationsquelleAutor der Antwort user3391823