Java包名可以是关键字吗?

11
当我尝试在IntelliJ(社区版)中创建一个名为implements的包时,我收到了一个消息,上面写着“不是一个有效的包名”。这是因为使用了关键字吗?

enter image description here


3
Java 包命名约定。请参考此文档以获取更多信息。 - takendarkk
不可以使用包名作为关键字,包名必须避免使用任何 Java 关键字,例如 int、class、implements。 - Karibasappa G C
4个回答

26
这是因为使用的关键字吗?
是的,一个包名具有以下形式:following form
PackageDeclaration:
    {PackageModifier} package Identifier {. Identifier} ;

其中标识符

Identifier:
    IdentifierChars but not a Keyword or BooleanLiteral or NullLiteral
IdentifierChars:
    JavaLetter {JavaLetterOrDigit}
JavaLetter:
    any Unicode character that is a "Java letter"
JavaLetterOrDigit:
    any Unicode character that is a "Java letter-or-digit"

所以关键词不能使用。

1
出于好奇,你知道有没有“PackageModifier”的例子吗?JLS说它必须是一个注释,但我以前从未见过这样的用法。 - asteri
@JeffGohlke 这并不是很常见,但您可以对包进行注释。想想 package-info.java 文件。在这里查看 JAXB 示例 - Sotirios Delimanolis
@JeffGohlke https://dev59.com/HXI95IYBdhLWcg3w5iY4 - yshavit
有趣。谢谢你提供这些例子! - asteri

4
您不能在包声明中使用Java关键字。
abstract   continue   for          new         switch
assert     default    if           package     synchronized
boolean    do         goto         private     this
break      double     implements   protected   throw
byte       else       import       public      throws
case       enum       instanceof   return      transient
catch      extends    int          short       try
char       final      interface    static      void
class      finally    long         strictfp    volatile
const      float      native       super       while

这些关键字不能使用。
包声明的语法是:
PackageDeclaration:
{PackageModifier} package Identifier {. Identifier} ;

在此,标识符是任何Unicode字符,它是“Java字母”或任何Unicode字符,它是“Java字母或数字”。 “Java字母”包括大写和小写的ASCII拉丁字母A-Z(\u0041-\u005a)和a-z(\u0061-\u007a),以及出于历史原因,ASCII下划线(_,或\u005f)和美元符号($,或\u0024)。 $符号应仅用于机械生成的源代码或极少数情况下访问遗留系统上的预先存在的名称。请参阅。
  1. http://docs.oracle.com/javase/tutorial/java/package/namingpkgs.html
  2. http://docs.oracle.com/javase/specs/jls/se8/html/jls-3.html#jls-IdentifierChars

2

-1

这对我来说很好,适用于Intellij 13.1.2,但是即使您创建一个与此名称相同的包,也不能使用它,因为Java package语句不接受包名中的关键字。所以,我可以创建,但不能使用:

package com.implements.thing;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接