eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programming › Implementacja typów generycznych
Ilość wypowiedzi w tym wątku: 5

  • 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

strony : [ 1 ]


Szukaj w grupach

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: