Unterschied zwischen dem Aufruf von new und getInstance ()

8
___ qstnhdr ___ Unterschied zwischen dem Aufruf von new und getInstance () ___ answer3170174 ___

Es gibt keine solche Methode wie Class.getInstance() . Sie verwechseln es wahrscheinlich mit new Class() . Und ja, das macht genau dasselbe wie getInstance() im Standard -Konstruktor. Hier ist ein Auszug aus seinem Javadoc :

  

Erstellt eine neue Instanz der Klasse, die von diesem %code% -Objekt repräsentiert wird. Die Klasse wird wie bei einem %code% -Ausdruck mit einer leeren Argumentliste instanziiert. Die Klasse wird initialisiert, wenn sie nicht bereits initialisiert wurde.

Im Code

%Vor%

ist dasselbe wie

%Vor%

Der %code% -Aufruf folgt tatsächlich dem Factory-Methode -Muster.

Update : Wenn ich die anderen Antworten sehe, wird mir klar, dass Ihre Frage etwas mehrdeutig ist. Nun, Orte, an denen eine Methode tatsächlich mit dem Namen %code% verwendet wurde, bezeichnet oft eine Abstrakte Fabrik Muster. Es wird "unter der Haube" %code% oder %code% verwenden, um die Instanz von Interesse zu erstellen und zurückzugeben. Es ist nur, um alle Details über die konkreten Implementierungen zu verbergen, die Sie möglicherweise nicht kennen müssen.

Außerdem sehen Sie diesen Methodennamen oft in einigen (meist selbst erstellten) Implementierungen des Singleton Muster.

Siehe auch:

___ tag123java ___ Java (nicht zu verwechseln mit JavaScript oder JScript oder JS) ist eine universelle objektorientierte Programmiersprache, die für die Verwendung in Verbindung mit der Java Virtual Machine (JVM) entwickelt wurde. "Java-Plattform" ist der Name für ein Computersystem, auf dem Tools zum Entwickeln und Ausführen von Java-Programmen installiert sind. Verwenden Sie dieses Tag für Fragen, die sich auf die Java-Programmiersprache oder Java-Plattform-Tools beziehen. ___ answer3170191 ___

Im Kontext einer abstrakten Klasse kann eine %code% -Methode das Fabrikmethodenmuster . Ein Beispiel ist die abstrakte Klasse %code% , die die statische Factory enthält Methoden und eine konkrete Unterklasse.

    
___ tag123abstractclass ___ Abstrakte Klassen sind Klassen, die nicht instanziiert werden können. Sie existieren, um verschiedenen konkreten Klassen gemeinsame Funktionalität und Schnittstellenspezifikationen zur Verfügung zu stellen. ___ answer45207897 ___

Ja, dies wird oft im Singleton-Muster verwendet. Es wird verwendet, wenn Sie nur eine Instanz einer Klasse benötigen. Die Verwendung von getInstance () ist vorzuziehen, da Implementierungen dieser Methode möglicherweise eine aktive Instanz der Klasse überprüfen und sie zurückgeben, anstatt eine neue zu erstellen. Es kann etwas Speicher sparen. Wie in diesem Beispiel:

%Vor%     
___ answer3170172 ___

Absolut (normalerweise) nicht.

%code% ist die statische Methode, die oft mit dem Singleton-Muster in Java verwendet wird. Das %code% Schlüsselwort erstellt tatsächlich ein neues Objekt. Irgendwann muss ein %code% vorhanden sein (obwohl es ein paar andere Methoden gibt, um neue Objekte zu instanziieren), um das Objekt zu erzeugen, das %code% zurückgibt.

    
___
SIr Codealot 03.07.2010, 03:05
quelle

4 Antworten

19

Es gibt keine solche Methode wie Class#getInstance() . Sie verwechseln es wahrscheinlich mit Class#newInstance() . Und ja, das macht genau dasselbe wie new im Standard -Konstruktor. Hier ist ein Auszug aus seinem Javadoc :

  

Erstellt eine neue Instanz der Klasse, die von diesem Class -Objekt repräsentiert wird. Die Klasse wird wie bei einem new -Ausdruck mit einer leeren Argumentliste instanziiert. Die Klasse wird initialisiert, wenn sie nicht bereits initialisiert wurde.

Im Code

%Vor%

ist dasselbe wie

%Vor%

Der Class#newInstance() -Aufruf folgt tatsächlich dem Factory-Methode -Muster.

Update : Wenn ich die anderen Antworten sehe, wird mir klar, dass Ihre Frage etwas mehrdeutig ist. Nun, Orte, an denen eine Methode tatsächlich mit dem Namen getInstance() verwendet wurde, bezeichnet oft eine Abstrakte Fabrik Muster. Es wird "unter der Haube" new oder Class#newInstance() verwenden, um die Instanz von Interesse zu erstellen und zurückzugeben. Es ist nur, um alle Details über die konkreten Implementierungen zu verbergen, die Sie möglicherweise nicht kennen müssen.

Außerdem sehen Sie diesen Methodennamen oft in einigen (meist selbst erstellten) Implementierungen des Singleton Muster.

Siehe auch:

BalusC 03.07.2010, 03:11
quelle
3

Im Kontext einer abstrakten Klasse kann eine getInstance() -Methode das Fabrikmethodenmuster . Ein Beispiel ist die abstrakte Klasse Calendar , die die statische Factory enthält Methoden und eine konkrete Unterklasse.

    
trashgod 03.07.2010 03:20
quelle
1

Absolut (normalerweise) nicht.

getInstance ist die statische Methode, die oft mit dem Singleton-Muster in Java verwendet wird. Das new Schlüsselwort erstellt tatsächlich ein neues Objekt. Irgendwann muss ein new vorhanden sein (obwohl es ein paar andere Methoden gibt, um neue Objekte zu instanziieren), um das Objekt zu erzeugen, das getInstance zurückgibt.

    
user166390 03.07.2010 03:09
quelle
0

Ja, dies wird oft im Singleton-Muster verwendet. Es wird verwendet, wenn Sie nur eine Instanz einer Klasse benötigen. Die Verwendung von getInstance () ist vorzuziehen, da Implementierungen dieser Methode möglicherweise eine aktive Instanz der Klasse überprüfen und sie zurückgeben, anstatt eine neue zu erstellen. Es kann etwas Speicher sparen. Wie in diesem Beispiel:

%Vor%     
whoismaikl 20.07.2017 07:18
quelle

Tags und Links