K čemu je v Javě prázdný String konstruktor?

někdo

Re:K čemu je v Javě prázdný String konstruktor?
« Odpověď #30 kdy: 17. 09. 2012, 11:39:39 »
1. bultin java serializaci prakticky nikdo nepouziva. Polozme si otazku proc existuje aspon 20 serializacnich frameworku.
Položme si zajímavější otázku: když built-in serializace prázdný konstruktor nepotřebuje, k čemu ho nutně potřebují ty frameworky?

Built-in serializace podvádí za vydatné podpory JVM. Framework může vytvořit objekt za použití prázdného konstruktoru a pak ho "dodělat" pomocí java.lang.reflect.*.


alef0

Re:K čemu je v Javě prázdný String konstruktor?
« Odpověď #31 kdy: 17. 09. 2012, 12:43:18 »
A čo potom java.lang.Long-y a java.lang.Integer-y?

DK

Re:K čemu je v Javě prázdný String konstruktor?
« Odpověď #32 kdy: 17. 09. 2012, 13:00:41 »
alef0: Long je delsi, nez Integer, alokuje si vice pameti

alef0

Re:K čemu je v Javě prázdný String konstruktor?
« Odpověď #33 kdy: 17. 09. 2012, 15:14:38 »
Narážal som na to, že Long nemá verejný bezparametrový konštruktor.

Re:K čemu je v Javě prázdný String konstruktor?
« Odpověď #34 kdy: 17. 09. 2012, 16:01:17 »
Built-in serializace podvádí za vydatné podpory JVM. Framework může vytvořit objekt za použití prázdného konstruktoru a pak ho "dodělat" pomocí java.lang.reflect.*.
To ale není důvod k tomu, aby každý objekt měl povinně bezparametrický konstruktor - a o tom je řeč.


Natix

Re:K čemu je v Javě prázdný String konstruktor?
« Odpověď #35 kdy: 17. 09. 2012, 16:13:34 »
Napadlo mě, že smysl tohohle defaultního kontruktoru bude asi podobný jako u jeho obdoby u java.lang.Object.

Vytvořit si instanci obyčejného Objectu samo o sobě nemá moc smysl, leda bych si potřeboval držet privátní objekt, o které vím, že je unikátní. V praxi jsem to viděl aplikované asi jenom pro synchronizační zámek:

Kód: [Vybrat]
private final Object lock = new Object();

Teoreticky by se mohl podobným způsobem definovat také privátní unikátní klíč do IdentityHashMap.

A aby to nebylo tak jednoduché, tak jsou 3 způsoby jak vyrobit prázdný string:
Kód: [Vybrat]
String s = "";
String s = new String();
String s = new String("");
A každý z nich funguje jinak.  :D

Re:K čemu je v Javě prázdný String konstruktor?
« Odpověď #36 kdy: 17. 09. 2012, 16:30:12 »
Napadlo mě, že smysl tohohle defaultního kontruktoru bude asi podobný jako u jeho obdoby u java.lang.Object.
To těžko - z důvodů, o kterých tady už byla řeč: http://www.jguru.com/faq/view.jsp?EID=34802

kuka

Re:K čemu je v Javě prázdný String konstruktor?
« Odpověď #37 kdy: 17. 09. 2012, 17:47:32 »
A aby to nebylo tak jednoduché, tak jsou 3 způsoby jak vyrobit prázdný string:
Kód: [Vybrat]
String s = "";
String s = new String();
String s = new String("");
A každý z nich funguje jinak.  :D

Prazdny string jde vytvorit mnohem vice zpusoby. Co to znamena, ze kazdy ze zpusobu funguje jinak? V cm to "neni jednoduche"? A neco z toho vyplyva?

Natix

Re:K čemu je v Javě prázdný String konstruktor?
« Odpověď #38 kdy: 17. 09. 2012, 18:08:45 »
A aby to nebylo tak jednoduché, tak jsou 3 způsoby jak vyrobit prázdný string:
Kód: [Vybrat]
String s = "";
String s = new String();
String s = new String("");
A každý z nich funguje jinak.  :D

Prazdny string jde vytvorit mnohem vice zpusoby. Co to znamena, ze kazdy ze zpusobu funguje jinak? V cm to "neni jednoduche"? A neco z toho vyplyva?

Jo, těch konstruktorů tam je kopec, ale tyhle tři případy výše se liší v principu, (asi) všechny ostatní už jsou obdobné.

Literál "" se bere ze string poolu. Druhý případ vyrobí nový objekt, který má vlastní (nové) interní char pole. Třetí vyrobí nový string objekt, ale bude mít char pole sdílené s prvním. Viz výpis identity-hashcodů:

Kód: [Vybrat]
""
String hashCode: 30223967
char[] hashCode: 18903403

new String()
String hashCode: 14978587
char[] hashCode: 19770577

new String("")
String hashCode: 28117098
char[] hashCode: 18903403

Lenin POWER!

  • ****
  • 434
  • Nekecat a delat!
    • Zobrazit profil
    • Tribut Leninovi
    • E-mail
Re:K čemu je v Javě prázdný String konstruktor?
« Odpověď #39 kdy: 17. 09. 2012, 23:26:08 »
1. bultin java serializaci prakticky nikdo nepouziva. Polozme si otazku proc existuje aspon 20 serializacnich frameworku.
Položme si zajímavější otázku: když built-in serializace prázdný konstruktor nepotřebuje, k čemu ho nutně potřebují ty frameworky?

Built-in serializace podvádí za vydatné podpory JVM. Framework může vytvořit objekt za použití prázdného konstruktoru a pak ho "dodělat" pomocí java.lang.reflect.*.

No vidite, tak jste na to prisli. Pokud jde o objekt varianty typu ala Integer, tak ty se diky efektivite serializuji jako primitivni typy a ne jako jejich objekt varianty.

Re:K čemu je v Javě prázdný String konstruktor?
« Odpověď #40 kdy: 17. 09. 2012, 23:59:42 »
No vidite, tak jste na to prisli. Pokud jde o objekt varianty typu ala Integer, tak ty se diky efektivite serializuji jako primitivni typy a ne jako jejich objekt varianty.

Aha, mně to hnedka nedošlo, máš úplnou pravdu! Natix se ptal, proč autoři Javy do API ten konstruktor dali - a ono to bylo takhle:

A: Ty hele, ta naše serializace je zatraceně pomalá!
B: To je v poho, vyrojí se spousta knihoven, který to budou dělat líp.
A: No jo, jenže nebudou potřebovat String()?
B: No, my to obcházíme neveřejnýma funkcema...
A: Tak jim tam ten String() dáme, ať nám tu serializaci můžou udělat pořádně!

Tak to jo.

Stejně to ale museli být pěkní vohnouti, když to vyřešili takhle, místo aby udělali pořádný rozhraní umožňující custom serializaci...

No ale hlavně že to teda už vím a můžu už googlit jenom porno.

Jakub Galgonek

Re:K čemu je v Javě prázdný String konstruktor?
« Odpověď #41 kdy: 18. 09. 2012, 00:07:11 »
Framework může vytvořit objekt za použití prázdného konstruktoru a pak ho "dodělat" pomocí java.lang.reflect.*.

Jak konkrétně by se dal dodělat?

KapitánRUMFree

Re:K čemu je v Javě prázdný String konstruktor?
« Odpověď #42 kdy: 18. 09. 2012, 00:18:05 »
....

-1 bod za naše diskuze o IPv6, ale +10 bodů za tenhle post  ;D

Re:K čemu je v Javě prázdný String konstruktor?
« Odpověď #43 kdy: 18. 09. 2012, 00:25:41 »
Framework může vytvořit objekt za použití prázdného konstruktoru a pak ho "dodělat" pomocí java.lang.reflect.*.
Jak konkrétně by se dal dodělat?
Nejspíš myslel vytvořit "prázdný" objekt "prázdným" konstruktorem a pak nastavit všechny vlastnosti pomocí java.lang.reflect.Field nebo tak něco...

Tahle myšlenka má jednu drobnou vadu: nemá to absolutně žádnou souvislost s tím, proč má String neparametrický konstruktor. (Nebudeme snad doufám tvrdit, že ho má proto, abysme mohli vytvořit prázdný String a potom ho pomocí reflect.Field změnit...)

Jakub Galgonek

Re:K čemu je v Javě prázdný String konstruktor?
« Odpověď #44 kdy: 18. 09. 2012, 00:36:50 »
Nejspíš myslel vytvořit "prázdný" objekt "prázdným" konstruktorem a pak nastavit všechny vlastnosti pomocí java.lang.reflect.Field nebo tak něco...

No což o to, já vím, jak to myslel. Spíše mne ale zajímá, pokud to jde udělat, tak jak? Hodil by se prostě přiklad kódu.