ModuleLayer.Controller (Java SE 17 & JDK 17)
Description: declaration: module: java.base, package: java.lang, class: ModuleLayer, class: Controller
Keywords: java.lang.ModuleLayer.Controller class

Module java.base
Package java.lang

# Class ModuleLayer.Controller

java.lang.Object
java.lang.ModuleLayer.Controller

Enclosing class:
  ModuleLayer

public static final class ModuleLayer.Controller extends Object
Controls a module layer. The static methods defined by `ModuleLayer` to create module layers return a `Controller` that can be used to control modules in the layer.

Unless otherwise specified, passing a `null` argument to a method in this class causes a `NullPointerException` to be thrown.

API Note:
  Care should be taken with `Controller` objects, they should never be shared with untrusted code.
Since:
  9

- ## Method Summary

  Modifier and Type
  Method
  Description
  `ModuleLayer.Controller`
  `addExports(Module source, String pn, Module target)`
  Updates module `source` in the layer to export a package to module `target`.
  `ModuleLayer.Controller`
  `addOpens(Module source, String pn, Module target)`
  Updates module `source` in the layer to open a package to module `target`.
  `ModuleLayer.Controller`
  `addReads(Module source, Module target)`
  Updates module `source` in the layer to read module `target`.
  `ModuleLayer`
  `layer()`
  Returns the layer that this object controls.

  ### Methods declared in class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Method Details

  - ### layer

    public ModuleLayer layer()
    Returns the layer that this object controls.
    Returns:
      the module layer

  - ### addReads

    public ModuleLayer.Controller addReads(Module source, Module target)
    Updates module `source` in the layer to read module `target`. This method is a no-op if `source` already reads `target`.
    Implementation Note:
      Read edges added by this method are weak and do not prevent `target` from being GC'ed when `source` is strongly reachable.
    Parameters:
      `source` - The source module
      `target` - The target module to read
    Returns:
      This controller
    Throws:
      `IllegalArgumentException` - If `source` is not in the module layer
    See Also:
      - `Module.addReads(java.lang.Module)`

  - ### addExports

    public ModuleLayer.Controller addExports(Module source, String pn, Module target)
    Updates module `source` in the layer to export a package to module `target`. This method is a no-op if `source` already exports the package to at least `target`.
    Parameters:
      `source` - The source module
      `pn` - The package name
      `target` - The target module
    Returns:
      This controller
    Throws:
      `IllegalArgumentException` - If `source` is not in the module layer or the package is not in the source module
    See Also:
      - `Module.addExports(java.lang.String, java.lang.Module)`

  - ### addOpens

    public ModuleLayer.Controller addOpens(Module source, String pn, Module target)
    Updates module `source` in the layer to open a package to module `target`. This method is a no-op if `source` already opens the package to at least `target`.
    Parameters:
      `source` - The source module
      `pn` - The package name
      `target` - The target module
    Returns:
      This controller
    Throws:
      `IllegalArgumentException` - If `source` is not in the module layer or the package is not in the source module
    See Also:
      - `Module.addOpens(java.lang.String, java.lang.Module)`