Zastanawiam się nad modułami JDK9. Załóżmy, że masz następujące 3 pakiety:W jaki sposób moduły JDK9 będą pomocne w "podpakietach o określonym zasięgu"?
com.company.product
com.company.product.impl_a
com.company.product.impl_b
klas w pakiecie product.impl_a
i product.impl_b
mogą być dostępne tylko w pakiecie product
klas. Użytkownik powinien używać tylko klas z pakietu product
. Możesz sobie wyobrazić, że przejście pewnych flag lub właściwości zdecyduje, czy będzie używane wewnętrznie.
W JDK8- musisz wykonać te klasy wewnątrz impl_a
i impl_b
public
. Ten rodzaj zasysa, ponieważ użytkownicy mogą zostać oszukani, że mogą korzystać z tych klas. Jest to całkowicie poprawne i dozwolone.
W jaki sposób JDK9 może tutaj pomóc? Czy zadeklarujemy moduł dla product.impl_a
i kolejny dla product.impl_b
i zadeklarujemy, że do eksportowanych klas ma dostęp tylko trzeci moduł product
, który będzie zależeć od dwóch modułów product.impl_a
i product.impl_b
? Ponadto, będzie praktycznie niemożliwe, aby zadeklarować nowy moduł, który będzie zależeć od product.impl_a
lub product.impl_b
? Czy inne moduły zależą tylko od modułu product
?
To ma sens. Czy można również używać modułów w ramach tego samego JAR? Czy możliwe jest wyeksportowanie 'com.company.product.impl_a' do' com.company.product' (i to samo dla 'impl_b')? W ten sposób klasy w 'impl_b' nie mogą nigdy używać' impl_a' pomimo klasy publicznej w 'impl_a'. (i wzajemnie). –
Nie, w Javie 9 może być tylko jeden moduł na JAR. (Było kilka próśb o tak zwane JAR-y wielomodułowe, ale nie wiem, jaki byłby plan dostarczenia tej funkcji.) Jeśli chcesz wyizolować _impl_a_ z _impl_b_, musisz utworzyć różne moduły. Zajrzyj do [services] (http://openjdk.java.net/projects/jigsaw/spec/sotms/#services), aby dowiedzieć się, jak je rozdzielić, więc _product_ nie musi ich znać. – Nicolai
Świetny link, to bardzo pomaga. DZIĘKI –