Reputation:
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?
Upvotes: 10
Views: 7765
Reputation: 32036
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.
Upvotes: 11