2015-07-20 12 views
5

Angenommen, ich tun:Erstellt GWT.create() immer ein neues Objekt im Browserspeicher?

VeryLargeObject o1 = GWT.create(VeryLargeObject.class(); 
VeryLargeObject o2 = GWT.create(VeryLargeObject.class(); 
... 
VeryLargeObject o1000 = GWT.create(VeryLargeObject.class(); 

wo VeryLargeObject eine Schnittstelle GWT Ressource ist, die extends com.google.gwt.i18n.client.Messages.

Erstellt dieser Code 1000 neue Instanzen des Objekts im Browser? Oder ist GWT intelligent genug, um zu erkennen, dass VeryLargeObject unveränderlich ist und jedes Mal wieder 1 Instanz verwendet?

EDIT: Ich fand diese in docs aber das Verhalten ist mir noch nicht klar:

Mit GWT.create (Klasse) auf „instanziiert“ eine Schnittstelle, die Nachrichten gibt eine Instanz eines automatisch generierten erstreckt Unterklasse, die mithilfe von Nachrichtenvorlagen implementiert wird, die basierend auf dem Gebietsschema ausgewählt werden.

+1

Sie können o1.toString(), o2.toString() usw. drucken, damit Sie prüfen können, ob der gleiche Wert gedruckt wird. Wenn ja, dann beziehen sie sich auf dasselbe Objekt. – alkis

+1

@alkis Ja, im Dev-Modus ist der Hash-Code neuer Objekte unterschiedlich. Aber das ist keine Garantie dafür, dass diese Objekte im Produktionsmodus nicht auf dasselbe Objekt verweisen. –

Antwort

4

Ja, GWT.create() wird eine neue Instanz jedes Mal zurückkehren . Aber ein guter Generator wird es so machen, dass dies im kompilierten Code weg optimiert werden kann.

Einer der ersten Dinge, die der GWT-Compiler tut, ist die Verschärfung von Typen (schreiben Sie den Code neu, um die höchstmögliche Klasse zu verwenden; in diesem Fall werden alle Benutzungen Ihrer Nachrichtenschnittstelle durch die generierte Implementierung ersetzt) Methoden statisch (außer wenn dynamischer Versand erforderlich ist, dh Polymorphismus wird tatsächlich verwendet).
Da die generierte Klasse keinen Status hat und ihr Konstruktor keine Nebeneffekte hat, bedeutet dies, dass die Instanzen für eine I18N-Nachrichtenschnittstelle optimiert werden können und nur die statischen Methoden im Code verbleiben (wenn sie später nicht inline sind)).
Mehr "komplexe" Fälle (zB Client-Bundles, CSS-Ressourcen) verwenden tatsächlich "statischen Zustand", so dass die Instanzen selbst wieder optimiert werden können und es am Ende keine Rolle spielt, ob Sie 1000 Instanzen erstellt oder nur geteilt haben ein.

2

Nach dem GWT Javadoc die create() -Methode eine neue Instanz zurückkehren wird, so bezweifle ich, es ist das gleiche Objekt

http://www.gwtproject.org/javadoc/latest/com/google/gwt/core/client/GWT.html#create(java.lang.Class)

+0

Während dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz zur Verfügung zu stellen. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert. – duffy356

+3

Ich habe "die wesentlichen Teile der Antwort" gepostet: "** Rückgabe: die neue Instanz **, die in die angeforderte Klasse umgewandelt werden muss". Es ist kein dicker Text –

Verwandte Themen