OVH Cloud OVH Cloud

Importer une classe du package par défaut ?

5 réponses
Avatar
Nico
Salut,

je modifie une application qui contient plusieurs classes à la racine de
l'arborescence de développement, et je voudrais en déplacer certaines dans
un package.

En clair, j'ai actuellement au niveau arborescence dans les fichiers sources
:
Classe1.java
Classe2.java
et je voudrais arriver à:
Classe1.java
<répertoire du package>
Classe2.java

Le problème c'est que Classe2 utilise Classe1 et je ne vois pas comment
faire un import de Classe1 qui ne fait pas partie d'un package. Quelqu'un
sait comment faire ?

Quelques explications plus détaillées : Classe1 est une Applet, je souhaite
la laisser à la racine pour qu'on puisse y faire référence directement dans
une page HTML <applet code="Classe1" ...> pour que les pages HTML existantes
continuent à fonctionner. Par contre, je trouve que ce serait quand même
plus propre qu'il y ait le minimum de classes à la racine.

Merci d'avance

5 réponses

Avatar
Cédric Chabanois
Salut,

je modifie une application qui contient plusieurs classes à la racine de
l'arborescence de développement, et je voudrais en déplacer certaines dans
un package.

En clair, j'ai actuellement au niveau arborescence dans les fichiers sources
:
Classe1.java
Classe2.java
et je voudrais arriver à:
Classe1.java
<répertoire du package>
Classe2.java

Le problème c'est que Classe2 utilise Classe1 et je ne vois pas comment
faire un import de Classe1 qui ne fait pas partie d'un package. Quelqu'un
sait comment faire ?

Quelques explications plus détaillées : Classe1 est une Applet, je souhaite
la laisser à la racine pour qu'on puisse y faire référence directement dans
une page HTML <applet code="Classe1" ...> pour que les pages HTML existantes
continuent à fonctionner. Par contre, je trouve que ce serait quand même
plus propre qu'il y ait le minimum de classes à la racine.

Merci d'avance

Il n'est plus possible d'importer une classe du package par défaut à

partir du JDK 1.4. La spec n'était pas très clair à ce niveau avant la
spec du JDK 1.4

Certains compilateurs ne l'acceptaient déjà pas avant.

http://bugs.sun.com/bugdatabase/view_bug.do?bug_idC61575

Un conseil : évite absolument le package par défaut ...

Cédric

Avatar
Olivier Thomann
En clair, j'ai actuellement au niveau arborescence dans les fichiers sources
:
Classe1.java
Classe2.java
et je voudrais arriver à:
Classe1.java
<répertoire du package>
Classe2.java

Le problème c'est que Classe2 utilise Classe1 et je ne vois pas comment
faire un import de Classe1 qui ne fait pas partie d'un package. Quelqu'un
sait comment faire ?
La réponse est simple. L'import de classes dans la default package est

interdit depuis le JDK1.4. Donc fortement non recommandée!

Tu mets ton applet dans un package et tu utilises son nom qualifié pour
la démarrer:
<applet code="momPackage.Classe1" ...

C'est l'unique solution portable dans le futur.
--
Olivier

Avatar
Nico
"Cédric Chabanois" a écrit
Il n'est plus possible d'importer une classe du package par défaut à
partir du JDK 1.4. La spec n'était pas très clair à ce niveau avant la
spec du JDK 1.4


Ok, merci.


Certains compilateurs ne l'acceptaient déjà pas avant.

http://bugs.sun.com/bugdatabase/view_bug.do?bug_idC61575


Je vois que la modification ne fait pas l'unanimité chez les développeurs
Java.

Un conseil : évite absolument le package par défaut ...


C'est ce que je fais habituellement, mais là je voulais modifier une
application que je n'ai pas faite en virant le maximum de classes du package
par défaut.
Avec cette restriction, je me retrouve obligé de conserver toutes les
classes qui s'y trouvent.
Je vais donc laisser cette partie du code en l'état.

En tout cas, merci pour les explications

Avatar
Nico
"Olivier Thomann"
La réponse est simple. L'import de classes dans la default package est
interdit depuis le JDK1.4. Donc fortement non recommandée!

Tu mets ton applet dans un package et tu utilises son nom qualifié pour
la démarrer:
<applet code="momPackage.Classe1" ...

C'est l'unique solution portable dans le futur.


Oui d'accord mais ce n'est pas portable par rapport à l'existant : l'applet
est utilisée par pas mal de monde et dans beaucoup de cas les pages html
utilisent <applet code="Classe1" ...>.
Et là je ne me vois pas faire une version qui oblige tous ceux qui se
servent de l'applet à modier leurs pages HTML.

Conclusion, le code va rester dans l'état actuel avec plusieurs classes dans
le package par défaut.

Merci pour les réponses.

Avatar
fg
"Nico" a écrit dans le message de
news:41a0c633$0$5990$

"Olivier Thomann"
La réponse est simple. L'import de classes dans la default package est
interdit depuis le JDK1.4. Donc fortement non recommandée!

Tu mets ton applet dans un package et tu utilises son nom qualifié pour
la démarrer:
<applet code="momPackage.Classe1" ...

C'est l'unique solution portable dans le futur.


Oui d'accord mais ce n'est pas portable par rapport à l'existant :
l'applet

est utilisée par pas mal de monde et dans beaucoup de cas les pages html
utilisent <applet code="Classe1" ...>.
Et là je ne me vois pas faire une version qui oblige tous ceux qui se
servent de l'applet à modier leurs pages HTML.

Conclusion, le code va rester dans l'état actuel avec plusieurs classes
dans

le package par défaut.

Merci pour les réponses.




Pas forcément, il y a a quand même une solution :
tu modifies Classe1 :
Classe1 extends package.Classe1bis
Tu copies tout le code de Classe1 dans Classe1bis, et tu ne laisses dans
Classe1 que des référence à Classe1bis (éventuellement, passe certains
champs ou certaines méthodes en protected, pour pouvoir y accéder de
Classe1)
Du coup, toutes les anciennes pages peuvent faire référence à Classe1, et
pour ce qui est des nouvelles que tu crées à partir de maintenant, c'est
quand même plus propre de mettre package.Classe1bis (sauf si pour un soucis
d'uniformité....)
Et plus aucune classe n'a à faire de référérence à Classe1 (les objets de
type CLasse1 sont aussi de type package.Classe1bis, donc ils ont les mêmes
méthodes...)

Voilà ma solution... si quelqu'un voit autre chose...

Frédéric