Understanding Module Loading in Java: Unnamed Modules and the java.util.List

Published on 2023.11.17

Java 9 introduced the concept of modules to the Java platform, allowing developers to organize and encapsulate their code more efficiently. In this article, we will explore unnamed modules and their relationship with the java.util.List interface.

What are Modules in Java?

Modules in Java are a way to group related packages and classes together. They provide a clear separation between the internal details of a module and its public API. This helps in managing large codebases and improves code maintainability.

Unnamed Modules

In Java, an unnamed module is a module that doesn't explicitly define a name in its module declaration. These modules are also known as the default module or the unnamed package.

How Unnamed Modules Work

When a module doesn't have a name, it gets assigned a unique name based on its location and contents. The unnamed module contains all the packages and classes in the classpath that are not part of an explicit module.

Benefits of Unnamed Modules

  1. Backward Compatibility: Unnamed modules allow existing code to run in a Java 9+ environment without explicitly migrating to the module system.
  2. Easy Migration: Unnamed modules provide a bridge between the classpath and the module system, allowing developers to gradually migrate their codebase to modules.

The java.util.List Interface

The java.util.List interface is a fundamental part of the Java Collections Framework. It represents an ordered collection of elements and provides methods for adding, removing, and manipulating elements.

Using List in Modules

In Java 9+, the java.util.List interface is part of the java.base module. Therefore, it is automatically available for all modules and the unnamed module.

Example: Using List in an Unnamed Module

Here's an example of using the java.util.List interface in an unnamed module:

import java.util.List;

public class UnnamedModuleExample {
  public static void main(String[] args) {
    List<String> myList = List.of("element1", "element2", "element3");
    for (String element : myList) {

In this example, we create an unnamed module and use the java.util.List interface to create a list of strings and print them.


In this article, we explored the concept of unnamed modules in Java and their relationship with the java.util.List interface. Unnamed modules provide backward compatibility and an easy migration path to the module system. The java.util.List interface is automatically available for all modules and the unnamed module.

By understanding and utilizing these concepts effectively, developers can make their code more modular and maintainable.