jasnoksieznik
-
Postów
2 -
Dołączył
-
Ostatnio
Nigdy
Typ zawartości
Profile
Fora
Kalendarz
Articles
Pliki
Posty napisane przez jasnoksieznik
-
-
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() ?
Java - jakim cudem dostęp do atrybutu prywatnego?
w Java
Napisano