Skocz do zawartości

Recommended Posts

Napisano

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

Napisano
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?

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...