jasnoksieznik Napisano Styczeń 1, 2015 Zgłoś Udostępnij Napisano Styczeń 1, 2015 Z robotniczym pozdrowieniem! Przeglądam kod dołączony do JDK 8 i znalazłem tam forkjoin -> mergesort. Gołym okiem widzę, jak program dobiera się do atrybutów prywatnych objektu. Jak to możliwe, że to działa? Wg. mnie to nie powinno się dać skompilować. Tenże MergeSort robi co następuje: public static void main(String[] args) { Configuration configuration = Configuration.parse(args); if (configuration == null) { System.exit(1); } System.out.println(configuration); new MergeDemo().run(configuration); } Jeśli się przyjrzeć MergeDemo.run: private void run(Configuration config) { Range sizes = config.sizes; Range parallelism = config.parallelism; // Tu program robi dalsze rzeczy, nieistotne dla problemu } } Tymczasem objekt Configuration jest zdefiniowany: private static class Configuration { private final Range sizes; private final Range parallelism; private Configuration(Range sizes, Range parallelism) { this.sizes = sizes; this.parallelism = parallelism; } public static Configuration parse(String[] args) { // standardowy parser z lini poleceń } } Moim problemem jest dostęp do config.sizes i config.parallelism - dlaczego mogą one zostać wywołane z MergeDemo.run, skoro są zadeklarowane jako private? Nie muszą być public, albo przez public Range getSizes() ? Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Mateusz Napisano Styczeń 2, 2015 Zgłoś Udostępnij Napisano Styczeń 2, 2015 Wnioskuje, że klasa Configuration jest zagnieżdżoną klasą w MergeDemo. W takim przypadku możesz się odwoływać w niej do prywatnych pól klasy zagnieżdżonej. Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
jasnoksieznik Napisano Styczeń 2, 2015 Autor Zgłoś Udostępnij Napisano Styczeń 2, 2015 Tak jest. Nie zauwazylem, ze run jest metoda, a nie oddzielna klasa. A tak generalnie, to jaki jest sens przekazywania config'a jako parametru, skoro w programie jest tylko jedna konfiguracja i jest ona przechowywana w statycznej klasie Configuration? Nie mozna zalozyc, ze ona po prostu jest i sie do niej odwolywac wprost? Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
KingOfTheLand Napisano Styczeń 6, 2015 Zgłoś Udostępnij Napisano Styczeń 6, 2015 Nic nie można zakladac. Dzis jest jutro nie ma dlatego programuje sie zawsze z mysla o nieskonczonej pojemnsci baz dancyh o nieskonczonej ilosci uzytkownikow i o rzeczach ktore nie snily sie hydraulikom Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.