2017-09-17 291 views
5

如何通過Java 9中的類獲取模塊名稱?例如,讓我們考慮以下情況。有兩個命名模塊 - ModuleA和ModuleB。 ModuleA對ModuleB一無所知。 ModuleB需要ModuleA。如何通過Java 9中的類獲取模塊名稱?

ModuleA含有類:

public class ClassA { 

    public void printModuleName(Class klass) { 
     //how to get here name of the module that contains klass? 
    } 
} 

ModuleB含有類:

public class ClassB { 

    public void doIt() { 
     ClassA objectA = new ClassA(); 
     objectA.printModuleName(ClassB.class); 
    } 
} 

怎麼辦呢?

回答

7

爲了得到Module在Java9一個Class,則可以使用getModule()

Module module = com.foo.bar.YourClass.class.getModule(); 

,並進一步getNameModule類來獲取模塊的名稱

String moduleName = module.getName(); 

需要注意的一點(不是在你使用命名模塊的情況下)是這個類或接口所屬模塊返回的模塊。

  • 如果此類表示數組類型,則此方法返回元素類型的模塊。
  • 如果此類表示原始類型或void,則返回java.base模塊的Module對象。
  • 如果此類位於未命名的模塊中,則返回此類的類加載器的未命名模塊。
+1

我來自OSGi,我認爲OSGi - 使用框架按類來獲取捆綁。 –