2014-04-23 7 views
6

Wenn ich versuche, ein Paket implements mit Intellij (Community Edition) zu erstellen, bekam ich die Nachricht Not a valid package name. Liegt das daran, dass das Keyword verwendet wird?Kann der Name des Java-Pakets ein Schlüsselwort sein?

enter image description here

+3

[Java Package Naming Conventions] (http://docs.oracle.com/javase/tutorial/java/package/namingpkgs.html). Dies kann einige Einblicke liefern. – csmckelvey

+0

Nein, es kann nicht Paketname sein .. Paketname darf kein Java-Schlüsselwort wie int, Klasse sein, implementiert auch –

Antwort

18

dies ist wegen der Keyword verwendet?

Ja, ein Paketname hat den following form

PackageDeclaration: 
    {PackageModifier} package Identifier {. Identifier} ; 

wo Identifier

ist
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" 

So keywords kann nicht verwendet werden.

+1

Aus Neugier, kennen Sie irgendwelche Beispiele für einen "PackageModifier"? Die JLS sagt, dass es eine Anmerkung sein muss, aber ich habe noch nie eine solche Verwendung gesehen. – asteri

+0

@JeffGohlke Es ist nicht sehr verbreitet, aber Sie können Pakete mit Anmerkungen versehen. Denken Sie an die Datei 'package-info.java'. Für ein JAXB-Beispiel siehe [hier] (http://stackoverflow.com/questions/7501494/what-is-jaxb-generated-package-info-java). –

+0

@JeffGohlke http://stackoverflow.com/questions/2099431/whats-the-point-of-package-annotations – yshavit

2

Sie können ein Java-Schlüsselwort in Ihrem Paket Erklärung verwenden.

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 

Diese keyworkds nicht verwendet werden können.

die Syntax der Paketdeklaration ist

PackageDeclaration: 
{PackageModifier} package Identifier {. Identifier} ; 

Hier Identifiers sind jedes Unicode-Zeichen, die eine "Java Buchstaben" oder jedes Unicode-Zeichen ist, dass ein "Java Brief-oder-Zahl" ist.
Die "Java-Buchstaben" enthalten Groß- und Kleinbuchstaben ASCII-lateinische Buchstaben AZ (\ u0041- \ u005a) und az (\ u0061- \ u007a) und aus historischen Gründen den ASCII-Unterstrich (_, oder \ u005f) und Dollarzeichen ($ oder \ u0024). Das $ -Zeichen sollte nur in mechanisch erzeugtem Quellcode verwendet werden oder selten für den Zugriff auf bereits vorhandene Namen auf Legacy-Systemen.

Siehe

  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
1

Dies funktioniert gut für mich, in IntelliJ 13.1.2 jedoch nicht ein Paket mit diesem Namen verwenden können, selbst wenn Sie eine erstellen, weil die Java package Anweisung wird kein Schlüsselwort akzeptieren überall in den Paketnamen. So kann ich schaffen, kann aber nicht verwendet werden:

package com.implements.thing;