Java 9模块名禁用字符及替代方案咨询,含下划线合法性疑问
Java 9模块名的禁用字符及命名建议
嘿,这个问题问得特别实用!我来给你把JPMS(Java平台模块系统)模块名的规则说清楚,包括禁用字符、允许的情况以及最佳实践:
核心规则:模块名的语法要求
Java 9的模块名本质上是由一个或多个合法的Java标识符组成,标识符之间用点(.)分隔。而这些标识符的规则和Java包名的标识符规则完全一致。
明确禁用的字符
以下字符绝对不能出现在模块名里:
- 你提到的连字符(
-):确实是严格禁用的,官方明确建议用点(.)替代 - 所有空白字符:比如空格、制表符、换行符等
- 各类特殊符号:
!、@、#、%、^、&、*、(、)、+、=、[、]、{、}、|、\、;、:、"、'、<、>、,、?、/ - 另外,标识符不能以数字开头,也不能使用Java的关键字(比如
public、class、module这些)
关于你问的下划线(_):它是允许作为标识符一部分的,但官方并不推荐使用。因为Java社区的惯例是模块名尽量和传统包名风格保持一致——用小写字母、点分隔,语义化命名,避免下划线。
最佳命名实践
- 优先采用反向域名的命名方式(比如把原命名
com.example.user-service改成com.example.user.service),和包名的命名逻辑对齐,提升可读性和规范性 - 模块名要语义化,尽量清晰表达模块的功能或职责,避免过于模糊的命名
- 如果你是从非模块化项目迁移过来,记得把原来命名里的连字符替换成点,避免编译报错
内容的提问来源于stack exchange,提问作者matandked
相关产品推荐
相关产品推荐

