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

Re:K čemu je v Javě prázdný String konstruktor?
« Odpověď #45 kdy: 18. 09. 2012, 00:43:13 »
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.
No hlavně to nejde udělat u Stringu, takže to je úplně mimo mísu. Stejně pro jakýkoli String obecně musím mít nějaké speciální zacházení, takže nechápu, proč bych to speciální zacházení neměl mít ausgerechnet u prázdnýho Stringu...

Ale už bych se v tom nerejpal, tahle debata je ujetá.

Podle mě to do API dali prostě proto, že to nic nestojí a asi jim to připadalo logciký. A jestli to má nějaký využití? No v hodně mokrých snech asi jo...


Lenin POWER!

  • ****
  • 434
  • Nekecat a delat!
    • Zobrazit profil
    • Tribut Leninovi
    • E-mail
Re:K čemu je v Javě prázdný String konstruktor?
« Odpověď #46 kdy: 18. 09. 2012, 12:47:00 »
A: Ty hele, ta naše serializace je zatraceně pomalá!
Deserializace je extremne pomala, java serializace je sice tak o rad pomalejsi nez ostatni frameworky, ale to by se jeste sneslo, ne kazdy projekt hodne serializuje. Vykon je jen jeden z duvodu proc se nepouziva, precti si dokumentaci k nejakemu frameworku co za ostatni problemy se pokousi resit.

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...

Je tam Externalizable, ale to se pouziva jeste mene nez Serializable, protoze kdyz si nekdo chce psat custom serializaci tak to napise uz poradne s vyuzitim nejakeho dobreho frameworku, ktery poskytuje vice funkci.

Pro stringy ten vyse zmineny postup funguje. Omez to porno a zacni na sobe makat.

Pro inspiraci nejaky ty frameworky http://code.google.com/p/thrift-protobuf-compare/wiki/Benchmarking

Re:K čemu je v Javě prázdný String konstruktor?
« Odpověď #47 kdy: 18. 09. 2012, 12:58:51 »
K puvodni otazce tazatele, k cemu konstruktor bez parametru u stringu. Pokud vim, Java ma generiku a tam je preci jen fajn vedet, ze new E() projde i pro String a nemusim na to vymyslet extraburty.

Skoda ze v C++ to neni jednoznacne. Treba mohu napsat new T() ale funguje to i pro std::string ale kdyz T je treba int, pak hodnota toho objektu je undefined.

kuka

Re:K čemu je v Javě prázdný String konstruktor?
« Odpověď #48 kdy: 18. 09. 2012, 14:32:00 »
K puvodni otazce tazatele, k cemu konstruktor bez parametru u stringu. Pokud vim, Java ma generiku a tam je preci jen fajn vedet, ze new E() projde i pro String a nemusim na to vymyslet extraburty.

Skoda ze v C++ to neni jednoznacne. Treba mohu napsat new T() ale funguje to i pro std::string ale kdyz T je treba int, pak hodnota toho objektu je undefined.

new E()??? A to by podle tebe udelalo co? Za predpokladu, ze by se to vubec prelozilo...

Natix

Re:K čemu je v Javě prázdný String konstruktor?
« Odpověď #49 kdy: 18. 09. 2012, 14:50:31 »
new E() v Javě napsat nejde díky type erasure


Re:K čemu je v Javě prázdný String konstruktor?
« Odpověď #50 kdy: 18. 09. 2012, 15:08:05 »
No nic, vidím, soudruhu Lenine, že jsi výhrady vůči mimoběžnosti tvého plkání k původní otázce buď nepochopil nebo nevzal v potaz.

Když dovolíš, nemusím na sobě v tomhle ohledu makat, protože v Javě nedělám a dělat nechci. Jednak nejsem primárně programátor, jednak v současnosti používám hlavně Erlang. I ne úplně dobrá znalost Javy stačí na to, aby člověk poznal, jak vaříš z vody.

S dovolením komunikaci s tebou končím, nic mi nedává.

JanK

Re:K čemu je v Javě prázdný String konstruktor?
« Odpověď #51 kdy: 18. 09. 2012, 20:37:51 »
Hlavne: objekty je v Jave nutne porovnavat vzdy pres metodu equals. Tyka se to i typu String.
Prazdny konstruktor s char(0) bych typoval na pozustatek z C++.

Re:K čemu je v Javě prázdný String konstruktor?
« Odpověď #52 kdy: 19. 09. 2012, 09:35:31 »
<flame>Aha, koukám, že jsem si myslel o generice v Javě víc, než je schopna. Další důvod, proč Javu nepoužívat</flame>

kuka

Re:K čemu je v Javě prázdný String konstruktor?
« Odpověď #53 kdy: 19. 09. 2012, 09:59:33 »
<flame>Aha, koukám, že jsem si myslel o generice v Javě víc, než je schopna. Další důvod, proč Javu nepoužívat</flame>

Aha, koukam, ze o generikach v jave nic nevis. Souhlasim, ze je to duvod, proc bys je nemel pouzivat.

Re:K čemu je v Javě prázdný String konstruktor?
« Odpověď #54 kdy: 19. 09. 2012, 10:14:01 »
Aha, koukam, ze o generikach v jave nic nevis. Souhlasim, ze je to duvod, proc bys je nemel pouzivat.
Je to pravda, že generika v javě jsou v podstatě jenom syntaktický cukr - všechno se provádí jenom při překladu a v runtime už je všechno přeložený v podstatě stejně, jako by to bylo v době, kdy ještě generika neexistovala?

To by pak měl Ondra celkem pravdu, že to je nuda...

Re:K čemu je v Javě prázdný String konstruktor?
« Odpověď #55 kdy: 19. 09. 2012, 10:34:55 »

Je to pravda, že generika v javě jsou v podstatě jenom syntaktický cukr - všechno se provádí jenom při překladu a v runtime už je všechno přeložený v podstatě stejně, jako by to bylo v době, kdy ještě generika neexistovala?

To by pak měl Ondra celkem pravdu, že to je nuda...

Mě jen přepkvapuje, že to řešili právě takto. Přitom si myslím, že by neměl být pro překladač problém vygenerovat kód namíru, tak jak to dělá C++ (malé zjednodušení pro ty, kteří nevědí, jak to funguje v C++, tak si představte trochu vymakanější makra v Cčku).

Momentálně by mě třeba zajímalo, jak v Javě řeší generické továrny objektů, když nefunguje new E ... ale to je v celku fuk.

kuka

Re:K čemu je v Javě prázdný String konstruktor?
« Odpověď #56 kdy: 19. 09. 2012, 10:51:57 »
Aha, koukam, ze o generikach v jave nic nevis. Souhlasim, ze je to duvod, proc bys je nemel pouzivat.
Je to pravda, že generika v javě jsou v podstatě jenom syntaktický cukr - všechno se provádí jenom při překladu a v runtime už je všechno přeložený v podstatě stejně, jako by to bylo v době, kdy ještě generika neexistovala?

To by pak měl Ondra celkem pravdu, že to je nuda...

Jestli te zajima, k cemu jsou a jak funguji generika v jave, tak si precti jeden z milionu clanku, ktere o tom existuji. Problem spociva v psani nesmyslu do diskuse k tematu, o kterem dotycny nic nevi (ze konstruktor bez parametru se vyuzije pro generika). At si napise blog "ma predstava o jave, kterou neznam, a jaky ma vztah k C++, ktere znam" a tam se muze zevrubne prozkoumat, proc tu javu udelali tak blbe.

Re:K čemu je v Javě prázdný String konstruktor?
« Odpověď #57 kdy: 19. 09. 2012, 11:17:21 »
Jestli te zajima, k cemu jsou a jak funguji generika v jave, tak si precti jeden z milionu clanku, ktere o tom existuji. Problem spociva v psani nesmyslu do diskuse k tematu, o kterem dotycny nic nevi (ze konstruktor bez parametru se vyuzije pro generika). At si napise blog "ma predstava o jave, kterou neznam, a jaky ma vztah k C++, ktere znam" a tam se muze zevrubne prozkoumat, proc tu javu udelali tak blbe.

Bezvadné vyhození z místnosti  :D

Okaj, omlouvám se, netušil jsem, že tohle v Javě nejde. Nicméně pak se nedivím té diskuzi předtím o serializačních frameworcích. Když vidím třeba workaround nemožnosti udělat new na generický typ... doporučení zavolat class.newInstance(), tak ... prominte, musím si odskočit na záchod (chybí tu patřičný smajlík)

Google mi vyplivl taky toto:
http://docs.oracle.com/javase/6/docs/api/java/lang/reflect/Constructor.html

kde newInstance volá konstruktor podle parametrů. Předpokládám, že bude volat String() konstruktor, pokud mu tam předložím třídu String a žádné parametry.

alef0

Re:K čemu je v Javě prázdný String konstruktor?
« Odpověď #58 kdy: 19. 09. 2012, 11:31:21 »
Na rozdiel od .NETu, kde sú generiká aj v čase behu, v Jave sa rozhodli to naozaj spraviť v záujme spätnej kompatibility. To má presne dôsledky ako "nemožno spraviť new E", "nemožno sa spýtať, aký typu je prvok List<T>" a podobne, proste všetko je to v čase behu java.lang.Object. Z týchto všetkých vecí ma to až tak neotravuje, asi najdivšia vec bola nemožnosť urobiť pole generických prvkov.

kuka

Re:K čemu je v Javě prázdný String konstruktor?
« Odpověď #59 kdy: 19. 09. 2012, 11:49:42 »
Jestli te zajima, k cemu jsou a jak funguji generika v jave, tak si precti jeden z milionu clanku, ktere o tom existuji. Problem spociva v psani nesmyslu do diskuse k tematu, o kterem dotycny nic nevi (ze konstruktor bez parametru se vyuzije pro generika). At si napise blog "ma predstava o jave, kterou neznam, a jaky ma vztah k C++, ktere znam" a tam se muze zevrubne prozkoumat, proc tu javu udelali tak blbe.

Bezvadné vyhození z místnosti  :D

Okaj, omlouvám se, netušil jsem, že tohle v Javě nejde. Nicméně pak se nedivím té diskuzi předtím o serializačních frameworcích. Když vidím třeba workaround nemožnosti udělat new na generický typ... doporučení zavolat class.newInstance(), tak ... prominte, musím si odskočit na záchod (chybí tu patřičný smajlík)

Google mi vyplivl taky toto:
http://docs.oracle.com/javase/6/docs/api/java/lang/reflect/Constructor.html

kde newInstance volá konstruktor podle parametrů. Předpokládám, že bude volat String() konstruktor, pokud mu tam předložím třídu String a žádné parametry.

Nikoho nevyhazuju, na to ani nemam prostredky. Pouze je mym nazorem, ze kdyz necemu nerozumim, tak se k tomu nevyjadruju, nebo si nejprve alespon udelam alespon minimalni prehled. Ty ovsem o generikach v jave vis pouze to, ze se tak jmenuji. Posun na uroven, na ktere by ses mohl smysluplne vyjadrit v teto diskusi by ti pritom zabral maximalne 10 minut.

A k veci. Ano pochopitelne lze pomoci reflexe zavolat kontruktor String() - proc by to nemelo jit? Diskuse byla v podstate o tom, ze pokud stejne musim vedet, ze jde o tridu String a jeji konstruktor bez parametru, a zaroven je zaruceno, ze tento konstruktor musi vratit novou instanci, ktera je obsahove shodna s konstantou prazdny retezec, tak mohu rovnou vratit konstantu prazdny retezec a na volani konstruktoru se vybodnout. Tedy by se zdalo, ze se bez tohoto konstruktoru da obejit a odtud puvodni otazka, proc tam vlastne je. A at uz je duvod jakykoliv, napriklad zjednoduseni pro ruzne, ne nutne pouze serializacni frameworky, jiste tento duvod nijak nesouvisi s generiky.