Skip to content

Commit b42879b

Browse files
claudemperor
authored andcommitted
Add Java 25 module import declaration examples (JEP 511)
1 parent 49dc8e5 commit b42879b

3 files changed

Lines changed: 33 additions & 2 deletions

File tree

‎JavaReleases/src/main/java/pl/mperor/lab/java/JavaBaseImport.java‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
class JavaBaseImport {
66

7-
private final List<String> listFromUtilPackage = List.of("a", "b", "c");
8-
private final File fileFromIoPackage = new File("file.txt");
7+
final List<String> listFromUtilPackage = List.of("a", "b", "c");
8+
final File fileFromIoPackage = new File("file.txt");
99

1010
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package pl.mperor.lab.java;
2+
3+
import module java.desktop;
4+
import java.util.List; // single-type import wins over the module import below, resolving List as java.util.List
5+
6+
/// Demonstrates a caveat called out by JEP 511: `import module java.desktop` imports every package
7+
/// exported by java.desktop (including `java.awt`, which defines `java.awt.List`) and, because
8+
/// java.desktop is not java.base, also every package exported by java.base (including `java.util`,
9+
/// which defines `java.util.List`). The bare name `List` is therefore ambiguous between the two
10+
/// types; without the single-type import above, this file would not compile.
11+
class JavaDesktopImportAmbiguity {
12+
13+
final List<String> names = List.of("John Doe", "Jane Doe");
14+
15+
}

‎JavaReleases/src/test/java/pl/mperor/lab/java/Java25.java‎

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,4 +148,20 @@ public void testScopedValueHasNoSetUnlikeThreadLocal() {
148148
Assertions.assertFalse(USER.isBound());
149149
}
150150

151+
@Test
152+
public void testModuleImportBringsInAllExportedPackagesOfJavaBase() {
153+
var demo = new JavaBaseImport();
154+
// List.of(...) (java.util) and new File(...) (java.io) are two different java.base packages,
155+
// both resolved inside JavaBaseImport.java by its single `import module java.base;` declaration
156+
Assertions.assertEquals(java.util.List.of("a", "b", "c"), demo.listFromUtilPackage);
157+
Assertions.assertEquals("file.txt", demo.fileFromIoPackage.getName());
158+
}
159+
160+
@Test
161+
public void testModuleImportAmbiguityResolvedBySingleTypeImport() {
162+
var demo = new JavaDesktopImportAmbiguity();
163+
// proof that `names` really is java.util.List, not java.awt.List, see JavaDesktopImportAmbiguity.java
164+
Assertions.assertEquals(java.util.List.of("John Doe", "Jane Doe"), demo.names);
165+
}
166+
151167
}

0 commit comments

Comments
 (0)