Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Klasa z zagnieżdżonymi obiektami

23 views
Skip to first unread message

J-23

unread,
May 25, 2022, 5:30:44 PM5/25/22
to
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

Filus

unread,
May 26, 2022, 7:30:04 AM5/26/22
to
W dniu 2022-05-25 o 21:02, J-23 pisze:
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

J-23

unread,
May 26, 2022, 3:53:27 PM5/26/22
to
W dniu 26.05.2022 o 13:18, Filus 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.

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

Filus

unread,
May 31, 2022, 4:00:03 AM5/31/22
to
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

J-23

unread,
May 31, 2022, 3:52:55 PM5/31/22
to
W dniu 30.05.2022 o 19:02, Filus pisze:
Zgoda ale to jest jeszcze inny sposób działania

Pozdrawiam

slawek

unread,
Jun 14, 2022, 9:40:04 AM6/14/22
to

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/
0 new messages