2014-04-23 22 views
6

Quando provo a creare un pacchetto implements usando Intellij (edizione community) ho ricevuto il messaggio Not a valid package name. Questo è dovuto alla parola chiave utilizzata?Il nome del pacchetto Java può essere una parola chiave?

enter image description here

+3

[Convenzioni di denominazione Java Package] (http://docs.oracle.com/javase/tutorial/java/package/namingpkgs.html). Questo potrebbe fornire alcune informazioni. – csmckelvey

+0

No, non può essere il nome del pacchetto ... il nome del pacchetto non deve essere una qualsiasi parola chiave java come int, classe, implementazioni –

risposta

18

È questo a causa della parola chiave utilizzata?

Sì, un nome del pacchetto ha il following form

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

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

Quindi keywords non possono essere utilizzati.

+1

Per curiosità, conosci qualche esempio di "PackageModifier"? Il JLS dice che deve essere un'annotazione, ma non ho mai visto un simile uso prima. – asteri

+0

@JeffGohlke Non è molto comune ma è possibile annotare i pacchetti. Pensa al file 'package-info.java'. Vedi [qui] (http://stackoverflow.com/questions/7501494/what-is-jaxb-generated-package-info-java) per un esempio JAXB. –

+0

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

2

Non è possibile utilizzare una parola chiave java nella dichiarazione pacchetto.

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 

Questi keyworkds non possono essere utilizzati.

la sintassi della dichiarazione pacchetto è

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

Qui identificatori sono qualsiasi carattere Unicode che è una "lettera Java" o qualsiasi carattere Unicode che è una "lettera-o cifre Java".
Le "lettere Java" includono lettere latine ASCII maiuscole e minuscole AZ (\ u0041- \ u005a) e az (\ u0061- \ u007a), e, per ragioni storiche, il carattere di sottolineatura ASCII (_, o \ u005f) e simbolo del dollaro ($ o \ u0024). Il segno $ deve essere utilizzato solo in codice sorgente generato meccanicamente o, raramente, per accedere a nomi preesistenti su sistemi legacy.

consultare

  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

Questo funziona bene per me, in Intellij 13.1.2, tuttavia, non è possibile utilizzare un pacchetto con questo nome, anche se si crea uno, perché l'istruzione java package non accetterà una parola chiave da nessuna parte nei nomi dei pacchetti. Quindi, posso creare, ma non posso usare:

package com.implements.thing; 
Problemi correlati