Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > pl.comp.lang.java > #10864 > unrolled thread

Klasa z zagnieżdżonymi obiektami

Started byJ-23 <Baczeklu@poczta.fm>
First post2022-05-25 21:02 +0200
Last post2022-06-14 15:39 +0200
Articles 6 — 3 participants

Back to article view | Back to pl.comp.lang.java


Contents

  Klasa z zagnieżdżonymi obiektami J-23 <Baczeklu@poczta.fm> - 2022-05-25 21:02 +0200
    Re: Klasa z zagnieżdżonymi obiektami Filus <filus@bleble.com> - 2022-05-26 13:18 +0200
      Re: Klasa z zagnieżdżonymi obiektami J-23 <Baczeklu@poczta.fm> - 2022-05-26 21:53 +0200
        Re: Klasa z zagnieżdżonymi obiektami Filus <filus@bleble.com> - 2022-05-30 19:02 +0200
          Re: Klasa z zagnieżdżonymi obiektami J-23 <Baczeklu@poczta.fm> - 2022-05-31 21:52 +0200
            Re: Klasa z zagnieżdżonymi obiektami slawek <x.y@org.org> - 2022-06-14 15:39 +0200

#10864 — Klasa z zagnieżdżonymi obiektami

FromJ-23 <Baczeklu@poczta.fm>
Date2022-05-25 21:02 +0200
SubjectKlasa z zagnieżdżonymi obiektami
Message-ID<628ea001$0$486$65785112@news.neostrada.pl>
Witam,

Grupa chyba 'martwa' ale spróbuje - czy znacie jakieś opisy lub może 
sami podpowiecie czy jest możliwość napisania własnej klasy którą będzie 
można zagnieżdżać przez '.' podobnie jak klasę System

Chodzi mi o efekt tego typu jak mamy np System.out.print

Pozdrawiam
J-23

[toc] | [next] | [standalone]


#10865

FromFilus <filus@bleble.com>
Date2022-05-26 13:18 +0200
Message-ID<t6nun4.coc.1@wintermute.pm>
In reply to#10864
W dniu 2022-05-25 o 21:02, J-23 pisze:
> Witam,
> 
> Grupa chyba 'martwa' ale spróbuje - czy znacie jakieś opisy lub może sami 
> podpowiecie czy jest możliwość napisania własnej klasy którą będzie można 
> zagnieżdżać przez '.' podobnie jak klasę System
> Chodzi mi o efekt tego typu jak mamy np System.out.print

Oczywiście, że tak. Wystarczy, że metoda (lub pole publiczne) zwraca jakiś 
obiekt a nie void.

To System.out.print() to w rzeczywistości odpowiednik:

final PrintStream out = System.out;
out.print("x");

Jak napiszesz sobie:

public class A {
  public static B b = new B();
}

public class B {
   public void method() {};
}

to możesz wszak wołać:

   A.b.method();


-- 
Filus

[toc] | [prev] | [next] | [standalone]


#10866

FromJ-23 <Baczeklu@poczta.fm>
Date2022-05-26 21:53 +0200
Message-ID<628fdab1$0$483$65785112@news.neostrada.pl>
In reply to#10865
W dniu 26.05.2022 o 13:18, Filus pisze:
> W dniu 2022-05-25 o 21:02, J-23 pisze:
>> Witam,
>>
>> Grupa chyba 'martwa' ale spróbuje - czy znacie jakieś opisy lub może 
>> sami podpowiecie czy jest możliwość napisania własnej klasy którą 
>> będzie można zagnieżdżać przez '.' podobnie jak klasę System
>> Chodzi mi o efekt tego typu jak mamy np System.out.print
> 
> Oczywiście, że tak. Wystarczy, że metoda (lub pole publiczne) zwraca 
> jakiś obiekt a nie void.
> 
> To System.out.print() to w rzeczywistości odpowiednik:
> 
> final PrintStream out = System.out;
> out.print("x");
> 
> Jak napiszesz sobie:
> 
> public class A {
>   public static B b = new B();
> }
> 
> public class B {
>    public void method() {};
> }
> 
> to możesz wszak wołać:
> 
>    A.b.method();
> 
> 
Dzięki za info do tego doszedłem też :) tylko widzisz pod względem 
wydajnościowym to wygląda źle a przynajmniej takie mam wrażenie bo 
wszystkie obiekty są tworzone "od razu" na starcie. W klasie System jest 
to tworzone w momencie użycia i o ten mechanizm mi chodzi.

Z drugiej strony mam świadomość ze klasa System jest specyficzna i 
podejrzewam że żeby ją tak napisać by obiekt był tworzony w momencie gdy 
jest potrzebny to 'chyba' odwołać się w specyficzny sposób do maszyny 
Javy

Tak czy inaczej dzięki za zainteresowanie.

Pozdrawiam
J-23

[toc] | [prev] | [next] | [standalone]


#10867

FromFilus <filus@bleble.com>
Date2022-05-30 19:02 +0200
Message-ID<t734c6.kno.1@wintermute.pm>
In reply to#10866
W dniu 2022-05-26 o 21:53, J-23 pisze:
> Dzięki za info do tego doszedłem też :) tylko widzisz pod względem 
> wydajnościowym to wygląda źle a przynajmniej takie mam wrażenie bo wszystkie 
> obiekty są tworzone "od razu" na starcie. W klasie System jest to tworzone w 
> momencie użycia i o ten mechanizm mi chodzi.

Leniwa inicjalizacja („Lazy initialization”) - i działanie na 
getterach/setterach zamiast bezpośrednio na polach. Najnaiwniejsza implementacja:

public class A {
   private static B b;

   public static B getB() {
     if (b == null) {
       b = new B();
     }

     return b;
   }
}

public class B {
    public void method() {};
}

i wołać:

    A.getB().method();


-- 
Filus

[toc] | [prev] | [next] | [standalone]


#10868

FromJ-23 <Baczeklu@poczta.fm>
Date2022-05-31 21:52 +0200
Message-ID<62967212$0$503$65785112@news.neostrada.pl>
In reply to#10867
W dniu 30.05.2022 o 19:02, Filus pisze:
> W dniu 2022-05-26 o 21:53, J-23 pisze:
>> Dzięki za info do tego doszedłem też :) tylko widzisz pod względem 
>> wydajnościowym to wygląda źle a przynajmniej takie mam wrażenie bo 
>> wszystkie obiekty są tworzone "od razu" na starcie. W klasie System 
>> jest to tworzone w momencie użycia i o ten mechanizm mi chodzi.
> 
> Leniwa inicjalizacja („Lazy initialization”) - i działanie na 
> getterach/setterach zamiast bezpośrednio na polach. Najnaiwniejsza 
> implementacja:
> 
> public class A {
>    private static B b;
> 
>    public static B getB() {
>      if (b == null) {
>        b = new B();
>      }
> 
>      return b;
>    }
> }
> 
> public class B {
>     public void method() {};
> }
> 
> i wołać:
> 
>     A.getB().method();
> 
> 
Zgoda ale to jest jeszcze inny sposób działania

Pozdrawiam

[toc] | [prev] | [next] | [standalone]


#10869

Fromslawek <x.y@org.org>
Date2022-06-14 15:39 +0200
Message-ID<t8a33h$216$1@news.icm.edu.pl>
In reply to#10868
Tak mniej więcej to chodzi o wzorzec projektowy dekorator. Jeżeli
 nie czytałeś jeszcze o wzorcach projektowych poczytaj sobie
 książkę lub cokolwiek na ten temat. Jeżeli czytałeś to wiesz o co
 chodzi.

Jak zależy ci na wydajności to cała sprawa w tym aby gdzieś tam
 gdzieś tam był zwracany obiekt specjalnie stworzony żeby robić to
 co powinien robić. Czyli później odwołujesz się do metod tego
 jednego obiektu i nie ma łańcucha wywołań czy jakiś innych
 spowolnień. Jeżeli jest jakiś łańcuch wywołań to tylko po to żeby
 skonstruować obiekt a to prawdopodobnie będzie potrzebne tylko
 raz i dlatego nie będzie w zasadzie opóźniało działania.


Leniwa inicjalizacja to jeszcze trochę coś innego ale jak
 najbardziej przydać się może.


----Android NewsGroup Reader----
http://usenet.sinaapp.com/

[toc] | [prev] | [standalone]


Back to top | Article view | pl.comp.lang.java


csiph-web