9

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

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);
    }
}

怎么做?

4

1 回答 1

9

要在 Java9 中Module通过 a获取 a Class,您可以使用getModule()

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

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

String moduleName = module.getName();

需要注意的一点(不是在您使用命名模块的情况下)是getModule返回该类或接口所属的模块。

  • 如果此类表示数组类型,则此方法返回元素类型的模块。
  • 如果此类表示原始类型或 void,则java.base返回模块的 Module 对象。
  • 如果此类在未命名模块中,则返回此类的类加载器的未命名模块。
于 2017-09-17T18:04:29.317 回答