Skocz do zawartości

jasnoksieznik

Członkowie
  • Postów

    2
  • Dołączył

  • Ostatnio

    Nigdy

Posty napisane przez jasnoksieznik

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

×
×
  • Utwórz nowe...