2014-04-23 9 views
6

Kiedy próbuję utworzyć pakiet implements przy użyciu Intellij (wydanie społecznościowe), otrzymałem wiadomość Not a valid package name. Czy to z powodu użycia słowa kluczowego?Czy nazwa pakietu Java może być słowem kluczowym?

enter image description here

+3

[package Java nazewnictwa] (http://docs.oracle.com/javase/tutorial/java/package/namingpkgs.html). Może to zapewnić pewien wgląd. – csmckelvey

+0

Nie, nie może to być nazwa pakietu. Nazwa pakunku nie może być żadnym słowem kluczowym java, takim jak int, class, implements też –

Odpowiedz

18

Czy to ze względu na słowo jest używane?

Tak, nazwa pakietu ma following form

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

gdzie Identifier jest

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" 

Więc keywords nie może być używany.

+1

Z ciekawości, czy znasz jakieś przykłady "PackageModifier"? JLS mówi, że to musi być adnotacja, ale nigdy wcześniej nie widziałem takiego zastosowania. – asteri

+0

@JeffGohlke Nie jest to zbyt częste, ale można dodawać adnotacje do pakietów. Pomyśl o pliku 'pakiet-info.java'. Zobacz [tutaj] (http://stackoverflow.com/questions/7501494/what-is-jaxb-generated-package-info-java) dla przykładu JAXB. –

+0

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

2

nie można użyć słowa kluczowego java w swojej deklaracji pakietu.

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 

Te klucze nie mogą być używane.

składnia deklaracji pakietu jest

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

Tutaj Identyfikatory są dowolny znak Unicode, że jest to „list Java” lub dowolny znak Unicode, który jest „Java Letter lub cyfr”.
"Litery Java" zawierają wielkie i małe litery ASCII łacińskie litery AZ (\ u0041- \ u005a) i az (\ u0061- \ u007a), a ze względów historycznych podkreślenie ASCII (_ lub \ u005f) i znak dolara ($ lub \ u0024). Znak $ powinien być używany tylko w mechanicznie generowanym kodzie źródłowym lub, rzadko, w celu uzyskania dostępu do wcześniej istniejących nazw w starszych systemach.

Patrz

  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

Działa to dobrze dla mnie, w IntelliJ 13.1.2, jednak nie można korzystać z pakietu o tej nazwie, nawet jeśli założyć, ponieważ oświadczenie java package nie zaakceptuje słowa kluczowego wszędzie w nazwach pakietów. Tak, mogę tworzyć, ale nie można używać:

package com.implements.thing; 
Powiązane problemy