2016-05-31 19 views
20

Właśnie zacząłem patrzeć na system Javy 9 i zastanawiałem się, czy klasa może wiedzieć, w którym module się znajduje.Metoda getModule zwracająca nienazwany moduł dla klasy w nazwanym module

Nich stworzyłem następujący moduł

module de.test { 
    exports de.test.myexport; 
} 

i skompilowany plik jar, który wygląda jak

> jar --print-module-descriptor --file=Java9Test-1.0-SNAPSHOT.jar         

de.test 
    requires mandated java.base 
    exports de.test.myexport 

w opakowaniu de.test, Mam klasy o nazwie Overview gdzie Dzwonię

Module module = Overview.class.getModule(); 

Jednak zwrócony obiekt modułu jest nienazwany i nie ma wartości ModuleDescriptor.

Czy poprawnie używam tutaj getModule(), czy jest jakiś inny sposób załadowania modułu klasy?

Używam JDK 9 build 120 na OS X.

+1

WOW, Java9 testowane przez Stiftung Warentest [:-) –

Odpowiedz

17

Wszystkie JAR na ścieżce klasy (z java --class-path ...) Get dołączone do tego samego tzw unnamed module, niezależnie od tego, czy są one „prawdziwy moduł” lub "po prostu JAR". Kiedy poprosisz klasę z takiego JARa o jej moduł, otrzymasz wynik, który opisujesz.

Spróbuj umieścić plik JAR na ścieżce modułu (z java --module-path ...), a Class::getModule powinien zwrócić to, czego oczekujesz.

+3

Dzięki, działało dokładnie tak, jak opisałeś. Dla mnie jednak intuicja nie wydaje się intuicyjna, że ​​'Class :: getModule' zachowuje się inaczej w zależności od sposobu wykonania klasy. –

Powiązane problemy