Skocz do zawartości

Java - jakim cudem dostęp do atrybutu prywatnego?


jasnoksieznik

Recommended Posts

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() ?

Link do komentarza
Udostępnij na innych stronach

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?
Link do komentarza
Udostępnij na innych stronach

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gość
Odpowiedz...

×   Wkleiłeś zawartość bez formatowania.   Usuń formatowanie

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Utwórz nowe...