Forum Programmation.java private package com.monsuperpackage

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
1
9
oct.
2013

Bonjour à tous,

voici une question à laquelle je n'arrive pas à trouver de réponse. Je viens de constater qu'il est, au moins syntaxiquement, possible de changer la portée du package déclaré en première ligne des fichiers .java. Exemple :

private package com.monsuperpackage

class Toto {
 // bla bla bla
}

Or, quel que soit la portée que mets au niveau du package, c'est celle au niveau de la déclaration de la classe qui est prise en compte. Dans l'exemple, comme aucun mot clé n'est spécifié, la classe Toto est accessible uniquement aux classes déclarée dans le même package, à savoir com.monsuperpackage.

J'ai essayé toutes les combinaisons possible entre la portée du package et celle de la classe mais rien à faire, c'est comme si le changement de la portée du package ne changeait rien. J'ai du mal à y croire, c'est pourquoi je vous pose la question, savez-vous quelle est l'utilité de changer la portée d'un package.

Merci !

ps : peut-être que j'exprime mal ma question et c'est la raison pour laquelle google ne me donne pas de réponse satisfaisante…

  • # Ce n’est pas supposé être possible…

    Posté par  (site web personnel) . Évalué à 3.

    Je viens de constater qu'il est, au moins syntaxiquement, possible de changer la portée du package déclaré en première ligne des fichiers .java.

    Avec quel compilateur ?

    Chez moi, avec javac 1.7.0, toute tentative d’ajouter un modificateur d’accès devant une déclaration de paquetage se solde par une erreur de compilation :

    $ javac Toto.java 
    Toto.java:1: error: class, interface, or enum expected
    private package com.monsuperpackage;
           ^
    1 error
    

    C’est conforme à la spécification du langage Java, qui ne semble pas admettre la possibilité d’ajouter un modificateur d’accès et précise d’ailleurs qu’un paquetage est toujours accessible.

    • [^] # Re: Ce n’est pas supposé être possible…

      Posté par  . Évalué à 1.

      J'utilise javac 1.7.0_25 et effectivement lorsque que je compile à la main cette classe, ça ne fonctionne pas, j'ai la même erreur que toi.

      Quand j'ai fait mes tests, j'utilisais Eclipse, seulement de ce que j'ai vu dans les paramètres du projet, Eclipse utilise également javac 1.7.0_25. Serait-ce un "bug" d'Eclipse ?

      • [^] # Re: Ce n’est pas supposé être possible…

        Posté par  . Évalué à 1.

        Je viens de faire le même test, mais avec NetBeans cette fois, et là encore ça ne fonctionne pas, j'ai une erreur au moment de la compilation.

        Je penche de plus en plus vers un problème venant d'Eclipse…

        • [^] # Re: Ce n’est pas supposé être possible…

          Posté par  . Évalué à 0.

          Sûrement une erreur au niveau d'eclipse, anéfé.
          Un modificateur d'accès indiqué au niveau d'un package n'a de toute façon pas de sens, puisque tu ne déclares pas le package, tu déclares que ta classe est dans le package.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.