Java 23 引入了两个新的预览功能:模块导入声明(预览)和隐式声明类中的自动模块导入。这些不应该在生产代码中使用,因为它们仍然可能发生变化。
1.模块导入声明(预览)- JEP 476
随着 Java 23 的发布,我们现在可以在代码中导入完整的模块。这意味着我们可以导入该模块导出的包中的所有类。
例如,我们可以导入完整的 java.base 模块并使用 List、Set、Map 和 Collectors 等类,而无需为每个类创建单独的导入语句。这可以通过使用“导入模块”语法来完成:
//Old style: import java.util.Map; // or import java.util.*; import java.util.function.Function; // or import java.util.function.*; import java.util.stream.Collectors; // or import java.util.stream.*; import java.util.stream.Stream; // (can be removed)
//New Style: import module java.base; public class MyExamCloud { public static Map> groupByFirstLetter(String...values) { return Stream.of(values).collect( Collectors.groupingBy(s -> Character.toUpperCase(s.charAt(0)))); } }
请注意,导入类不需要位于模块中即可使用此语法。
如果有两个同名的导入类,可能会出现不明确的类名。为了解决这个问题,我们需要直接在 import 语句中指定所需的类。
此外,当一个模块传递导入另一个模块时,我们可以使用传递导入模块的导出包中的所有类,而无需任何显式导入。例如,java.sql 模块传递性地导入 java.xml 模块,因此我们可以使用 java.xml 中的类,而无需显式导入它们。
2.隐式声明类中的自动模块导入
在 Java 23 中,隐式声明的类将自动导入完整的 java.base 模块。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3