-
1. Data: 2010-07-07 14:20:33
Temat: Implementacja typów generycznych
Od: "Sakujami" <s...@n...gmail.to>
Czy jeżeli mam klasę uogólnioną a jej funkcje wywołam dla różnych typów to
czy kod sie duplikuje? Zdaje się ze tak było z szablonami w C++ natomiast w
Javie w miejscu typu uogólnionego można wstawiać tylko klasy? Gdyby trzeba
było duplikować kod przy wykorzystaniu, to w żaden sposób nie można by
skompilować klasy do kodu wynikowego; a jak jest w Javie?
-
2. Data: 2010-07-07 14:25:09
Temat: Re: Implementacja typów generycznych
Od: Jacek Czerwinski <...@...z.pl>
W dniu 2010-07-07 16:20, Sakujami pisze:
> Czy jeżeli mam klasę uogólnioną a jej funkcje wywołam dla różnych typów to
> czy kod sie duplikuje? Zdaje się ze tak było z szablonami w C++ natomiast w
> Javie w miejscu typu uogólnionego można wstawiać tylko klasy? Gdyby trzeba
> było duplikować kod przy wykorzystaniu, to w żaden sposób nie można by
> skompilować klasy do kodu wynikowego; a jak jest w Javie?
W Javie informacja o tym typie jest (w dużym stopniu ??) ucinana.
'Podobno' dotyczy tylko kompilacji i nie przenosi sie na etap runtime (z
czego wynika, ze wystarczy jeden kod binarny).
Niech na mnie specjalisci nie krzycza za bardzo ;)
-
3. Data: 2010-07-07 14:29:40
Temat: Re: Implementacja typów generycznych
Od: "Sakujami" <s...@n...gmail.to>
Użytkownik "Jacek Czerwinski" <...@...z.pl> napisał w wiadomości
news:i122o8$hi3$1@news.onet.pl...
> W Javie informacja o tym typie jest (w dużym stopniu ??) ucinana.
> 'Podobno' dotyczy tylko kompilacji i nie przenosi sie na etap runtime (z
> czego wynika, ze wystarczy jeden kod binarny).
> Niech na mnie specjalisci nie krzycza za bardzo ;)
Czyli nie da się napisać funkcji max dla typu generycznego gdzie można by
wstawić zarówno int jak i double. Czy w Javie w miejsce typu generycznego
można wstawić tylko klasy ?
-
4. Data: 2010-07-07 15:00:14
Temat: Re: Implementacja typów generycznych
Od: "Sakujami" <s...@n...gmail.to>
Użytkownik "Sakujami" <s...@n...gmail.to> napisał w wiadomości
news:i1231e$i8f$1@news.onet.pl...
> Czyli nie da się napisać funkcji max dla typu generycznego gdzie można by
> wstawić zarówno int jak i double. Czy w Javie w miejsce typu generycznego
> można wstawić tylko klasy ?
Już mówię o co mi chodzi:
W Delphi od 2009 możemy mieć:
================================================
unit Unit1;
interface
uses
Generics.Collections;
type
MyTList<T> = class(TList<T>) // TList is a class in the
Generics.Collections namespace
FItems: array of T;
protected
function GetLength: Integer;
public
function Get(Index: Integer): T;
published
property Len: Integer read GetLength;
end;
{ ScoreList derived from a TList<double>}
ScoreList = class(MyTList<double>)
end;
{ StringList derived from a TList<string>}
StringList = class(MyTList<string>)
end;
implementation
function MyTList<T>.GetLength: Integer;
begin
Result := Count;
end;
function MyTList<T>.Get(Index: Integer): T;
begin
Result := Items[Index];
end;
end.
================================================
W dpr mamy wołanie
var
Lista1: MyTList<TObject>;
Lista2: MyTList<integer>;
Lista3: MyTList<array[0..5] of char>;
begin
Lista1:=MyTList<TObject>.Create;
Lista1.Add(nil);
Lista1.Free;
Lista2:=MyTList<integer>.Create;
Lista2.Add(5);
Lista2.Free;
================================================
Widać że typy to moga być nie tylko klasy lae dowolne. W tym przypadku mamy
duplikowanie się kodu nie tylko Unit1 ale i unitu Generics.Collections. Jak
to mogło zostać zaimplementowane, w .dcu nie może być już kodu wykonywalnego
ale prekompilowany szkielet który dalej się kompiluje? A jeszcze więcej
zastanawiające gdy klasa uogólniona jest w DLL czy dokładniej mówiąc, czy
może być w BPL?
-
5. Data: 2010-07-07 15:34:27
Temat: Re: Implementacja typów generycznych
Od: Krzysiek Kowaliczek <k...@g...com>
Użytkownik Sakujami napisał:
> Czyli nie da się napisać funkcji max dla typu generycznego gdzie można by
> wstawić zarówno int jak i double. Czy w Javie w miejsce typu generycznego
> można wstawić tylko klasy ?
Tak. W Javie generyki są zrobione od tyłka strony.
Niektórzy, jak autorzy Scali, próbują to łatać:
http://www.scala-lang.org/sites/default/files/sids/d
ragos/Thu,%202010-05-06,%2017:56/sid-spec.pdf
Pozdrawiam
KK