🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.java
6 messages
6 total messages Started by J-23 Wed, 25 May 2022 21:02
Klasa z zagnieżdżonymi obiektami
#152139
Author: J-23
Date: Wed, 25 May 2022 21:02
9 lines
295 bytes
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
Re: Klasa z zagnieżdżonymi obiektami
#152140
Author: Filus
Date: Thu, 26 May 2022 13:18
32 lines
717 bytes
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
Re: Klasa z zagnieżdżonymi obiektami
#152141
Author: J-23
Date: Thu, 26 May 2022 21:53
45 lines
1378 bytes
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
Re: Klasa z zagnieżdżonymi obiektami
#152142
Author: Filus
Date: Mon, 30 May 2022 19:02
31 lines
717 bytes
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
Re: Klasa z zagnieżdżonymi obiektami
#152143
Author: J-23
Date: Tue, 31 May 2022 21:52
34 lines
890 bytes
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
Re: Klasa z zagnieżdżonymi obiektami
#152144
Author: slawek
Date: Tue, 14 Jun 2022 15:39
19 lines
848 bytes
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/
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads