10

How to get module name by class in Java 9? For example, let's consider the following situation. There are two named modules - ModuleA and ModuleB. ModuleA knows nothing about ModuleB. ModuleB requires ModuleA.

ModuleA contains class:

public class ClassA {

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

ModuleB contains class:

public class ClassB {

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

How to do it?

Imran Ali
  • 2,223
  • 2
  • 28
  • 41
Pavel_K
  • 10,748
  • 13
  • 73
  • 186

1 Answers1

11

To get a Module by a Class in Java9, you can use the getModule()

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

and further getName on the Module class to fetch the name of the module

String moduleName = module.getName();

An observable point to note (not in your case as you're using named modules) is that the getModule returns the module that this class or interface is a member of.

  • If this class represents an array type then this method returns the Module for the element type.
  • If this class represents a primitive type or void, then the Module object for the java.base module is returned.
  • If this class is in an unnamed module then the unnamed Module of the class loader for this class is returned.
Naman
  • 27,789
  • 26
  • 218
  • 353