2017-09-17 290 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 - 使用框架按类来获取捆绑。 –