2017-05-22 70 views
11

Jest to deklaracja moduł modułu java.rmi:Czy między modułami platformy dozwolone są cykle?

module java.rmi { 
    requires java.base; 
    requires java.logging; 

    exports java.rmi.activation; 
    exports com.sun.rmi.rmid to java.base; // <-- cycle 
    ... 
} 

Tak, tam jest cyklicznym zależność między java.rmi i java.base, prawda? Czy dozwolone są cykle między platform modules?

+0

@Eugene 'com.sun.rmi' to pakiet wyeksportowany przez moduł' java.rmi' – ZhekaKozlov

+0

@Eugent 'java.rmi' zależy od' java.base'. Ale eksportuje również swój pakiet do 'java.base', więc' java.base' najwyraźniej potrzebuje dostępu do tego pakietu (w przeciwnym wypadku linia kodu nie miała sensu). – ZhekaKozlov

Odpowiedz

10

System modułów nie pozwala na statyczne zadeklarowanie cykli z klauzulami requires. Dotyczy to platform i modułów aplikacji, a podany przykład nie narusza tej reguły.

Klauzule wyma gania są tylko jednym źródłem dla czytelności krawędzi na wykresie modułu. Inne to flagi linii poleceń, odbicie, requires transitive i jestem pewien, że jest ich więcej. Dodanie tych wszystkich może spowodować cykle na wykresie modułu, co nie jest zabronione.

W swojej konkretny przykład cykl jest tworzony tylko raz java.base czyta java.rmi, co może się zdarzyć, jeśli używa refleksji o zajęciach w com.sun.rmi.rmid.