🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.java
Article #153902

Re: Przesiadka z Delphi

#153902
From: Arivald
Date: Tue, 08 Oct 2013 19:51
45 lines
2570 bytes
W dniu 2013-10-08 21:10, Borneq pisze:
> Użytkownik "Arivald" <arivald_@AT_interia_DOT_.pl> napisał w wiadomości
> news:l30sgq$i0o$1@news.dialog.net.pl...
>> A na generykach stracisz kupę czasu i szacunek dla twórców Javy ;-)
>> Niestety Java ma jedną z najgorszych implementacji generyków, już od
>> narodzin zepsutą przez wsteczną kompatybilność.
>
> A co jest złego w generykach Javy? czego nie można na nich zrobić?


Podstawowa wada - zacieranie typu klasy generycznej.

Np w Delphi TList<klasaA> i TList<klasaB> to są dwa różne typy. Podobnie 
jest w większości języków. w C++ te typy są nawet osobno kompilowane, z 
różnymi optymalizacjami.

A w Javie List<klasaA> i List<klasaB> to jest dokładnie ten sam typ. 
Zresztą dokładnie ten sam kod jest wykonywany (nie "taki sam", ale 
dokładnie "ten sam").

Gdzie to przeszkadza? A na przykład przy przeciążeniu funkcji. W Jawie

function void fun(List<klasaA> list);
function void fun(List<klasaB> list);

Mają tą samą sygnaturę, i przeciążenie jest niemożliwe.

Albo mając function fun(List<T> list) nie jesteś w stanie stwierdzić 
jaką klasą jest T bez użycia refleksji. Dlatego używa się form z 
obowiązkowym przekazaniem klasy, np:

function void fun(List<T> list, Class<?> clazz);


A to wszystko tylko po to żeby generyczne kolekcje były kompatybilne ze 
starszymi niegenerycznymi API... Tak, do funkcji:

function void fun(List list);

... możesz przekazać zarówno List<klasaA> jak i List<klasaB> i będzie 
działać.


-- 
Arivald
Technical Details
Message-ID: <l31ntb$uae$1@news.dialog.net.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.cyf-kr.edu.pl!news.nask.pl!news.nask.org.pl!newsfeed.pionier.net.pl!news.dialog.net.pl!not-for-mail
References: <l30php$ujq$1@news.task.gda.pl> <l30sgq$i0o$1@news.dialog.net.pl> <l31laa$eb6$1@node1.news.atman.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.cyf-kr.edu.pl!news.nask.pl!news.nask.org.pl!newsfeed.pionier.net.pl!news.dialog.net.pl!not-for-mail
From: Arivald <NOSPAMarivald@interia.pl>
Newsgroups: pl.comp.lang.java
Subject: Re: Przesiadka z Delphi
Date: Tue, 08 Oct 2013 21:51:08 +0200
Organization: Dialog Net
Lines: 46
Message-ID: <l31ntb$uae$1@news.dialog.net.pl>
References: <l30php$ujq$1@news.task.gda.pl> <l30sgq$i0o$1@news.dialog.net.pl> <l31laa$eb6$1@node1.news.atman.pl>
NNTP-Posting-Host: dynamic-78-8-13-180.ssp.dialog.net.pl
Mime-Version: 1.0
X-Trace: news.dialog.net.pl 1381262059 31054 78.8.13.180 (8 Oct 2013 19:54:19 GMT)
X-Complaints-To: abuse@dialog.net.pl
NNTP-Posting-Date: Tue, 8 Oct 2013 19:54:19 +0000 (UTC)
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Thunderbird/24.0
In-Reply-To: <l31laa$eb6$1@node1.news.atman.pl>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit