Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > pl.comp.lang.java > #10864 > unrolled thread
| Started by | J-23 <Baczeklu@poczta.fm> |
|---|---|
| First post | 2022-05-25 21:02 +0200 |
| Last post | 2022-06-14 15:39 +0200 |
| Articles | 6 — 3 participants |
Back to article view | Back to pl.comp.lang.java
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
| From | J-23 <Baczeklu@poczta.fm> |
|---|---|
| Date | 2022-05-25 21:02 +0200 |
| Subject | Klasa 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]
| From | Filus <filus@bleble.com> |
|---|---|
| Date | 2022-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]
| From | J-23 <Baczeklu@poczta.fm> |
|---|---|
| Date | 2022-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]
| From | Filus <filus@bleble.com> |
|---|---|
| Date | 2022-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]
| From | J-23 <Baczeklu@poczta.fm> |
|---|---|
| Date | 2022-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]
| From | slawek <x.y@org.org> |
|---|---|
| Date | 2022-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