如何在Java 9中按类获取模块名称?

Pav*_*l_K 7 java java-9 java-module

如何在Java 9中按类获取模块名称?例如,让我们考虑以下情况.有两个命名模块 - ModuleA和ModuleB.ModuleA对ModuleB一无所知.ModuleB需要ModuleA.

ModuleA包含类:

public class ClassA {

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

ModuleB包含类:

public class ClassB {

    public void doIt() {
        ClassA objectA = new ClassA();
        objectA.printModuleName(ClassB.class);
    }
}
Run Code Online (Sandbox Code Playgroud)

怎么做?

Nam*_*man 7

为了得到一个ModuleClass在Java9,您可以使用getModule()

Module module = com.foo.bar.YourClass.class.getModule();
Run Code Online (Sandbox Code Playgroud)

并进一步getNameModule类上获取模块的名称

String moduleName = module.getName();
Run Code Online (Sandbox Code Playgroud)

一个可观察的注意事项(在您使用命名模块时不是这种情况)是getModule返回此类或接口所属的模块.

  • 如果此类表示数组类型,则此方法返回元素类型的Module.
  • 如果此类表示基本类型或void,则java.base返回模块的Module对象.
  • 如果此类位于未命名的模块中,则返回此类的类加载器的未命名模块.