2010-01-24 2 views
9

je peux déclarer le paquet suivant avec des modificateurs mais il ne semble pas avoir d'effet sur quoi que ce soit:Pourquoi les modificateurs sont-ils autorisés pour un paquet quand ils ne semblent rien faire?

private public protected static final package com.stackoverflow.mangodrunk 

// ... 
class Whatever { 
    // ... 
} 

Donc ma question est, ne l'ajout d'un modificateur avant un decleration paquet quoi que ce soit et pourquoi serait-il autorisé par le compilateur?

Mise à jour: Semble être un problème avec le compilateur fourni avec Eclipse, comme d'autres l'ont mentionné, il s'agit d'une erreur du compilateur utilisant le JDK de Sun.

+0

Bordel, vous avez raison, le compilateur Eclipse compile ce très bien .... Ce – skaffman

+0

est un bug assez mineur, mais si vous voulez signaler, vous pouvez le faire ici : https://bugs.eclipse.org/bugs/ – McDowell

Répondre

7

Ils ne le sont pas. Quel compilateur utilisez-vous?

$ javac com/stackoverflow/mangodrunk/Whatever.java 

com/stackoverflow/mangodrunk/Whatever.java:1: class, interface, or enum expected 
private public protected static final package com.stackoverflow.mangodrunk; 
            ^
1 error 
+0

J'utilise JDK 1.6.0_17, et vous avez raison, il y a une erreur de compilateur quand j'essaye de le compiler en utilisant javac. Mais sous éclipse il n'y a pas de problème. – mangoDrunk

+1

Qu'est-ce que cela dit à propos de l'Eclipse JDK? – duffymo

+0

Probablement une erreur mineure dans leur grammaire l'amenant à ignorer * quoi que ce soit * avant "package" pas seulement des commentaires? Voyez si d'autres mots-clés sont également ignorés. Je suppose que vous devriez signaler le bug à moins qu'il ait déjà été signalé. – Draemon

4

Selon le JLS, la seule chose qui peut précéder package est une annotation.

PackageDeclaration: 
     Annotationsopt package PackageName ; 

Mais une annotation ressemble à ceci (la grammaire complète omis par souci de concision):

NormalAnnotation: 
     @ TypeName (ElementValuePairsopt) 

Ainsi, votre compilateur devrait pas permettre des modificateurs d'accès standard.

Source: http://java.sun.com/docs/books/jls/third_edition/html/packages.html

Questions connexes