eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingImplementacja typów generycznych › Re: Implementacja typów generycznych
  • Path: news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!not
    -for-mail
    From: "Sakujami" <s...@n...gmail.to>
    Newsgroups: pl.comp.lang.delphi,pl.comp.programming
    Subject: Re: Implementacja typów generycznych
    Date: Wed, 7 Jul 2010 17:00:14 +0200
    Organization: http://onet.pl
    Lines: 70
    Message-ID: <i124q3$nng$1@news.onet.pl>
    References: <i122fi$gmf$1@news.onet.pl> <i122o8$hi3$1@news.onet.pl>
    <i1231e$i8f$1@news.onet.pl>
    NNTP-Posting-Host: 194.117.241.226
    X-Trace: news.onet.pl 1278514819 24304 194.117.241.226 (7 Jul 2010 15:00:19 GMT)
    X-Complaints-To: n...@o...pl
    NNTP-Posting-Date: Wed, 7 Jul 2010 15:00:19 +0000 (UTC)
    X-Priority: 3
    X-MSMail-Priority: Normal
    X-Newsreader: Microsoft Outlook Express 6.00.2900.5931
    X-RFC2646: Format=Flowed; Response
    X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.5931
    Xref: news-archive.icm.edu.pl pl.comp.lang.delphi:325033 pl.comp.programming:186007
    [ ukryj nagłówki ]

    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?


Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: