Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

erreur : cannot find symbol

2 réponses
Avatar
olivier shawn
Bonjour,

j'apprends Java avec le livre des Cahiers du Programmeur.

Et j'ai un problème de compilation.

J'ai un fichier "Boissons.java" qui contient :

************* Boissons.java

package com.eteks.test;

class Boisson {
// les attributs
...

// le contructeur
Boisson (String nom) { this.nom = nom;}

// autres méthodes
...
}

class Boissons {

public static void main (String args[]) {

// du code pour tester la classe Boisson
}
}

*****************************

Ensuite, j'ai un autre fichier "CaveAVins" qui fait également parti du
package com.eteks.test et qui a un moment fait appel à Boisson :

Boisson soda = new Boisson("soda");

Cette ligne déclenche une erreur de compilation "cannot find symbol"
symbol : class Boisson
symbol : class com.eteks.test.CaveAVin


Je ne peux résoudre le problème qu'en créant un fichier Boisson.java et
en mettent l'implémentation de la classe dedans avec le modificateur
"public" devant.


Est-ce normal ?
Car sur le CD fourni avec le bouquin, les fichiers sont comme j'ai
écrit, ils n'ont pas à subir cette modification.

2 réponses

Avatar
jlp
Bonjour,

j'apprends Java avec le livre des Cahiers du Programmeur.

Et j'ai un problème de compilation.

J'ai un fichier "Boissons.java" qui contient :

************* Boissons.java

package com.eteks.test;

class Boisson {
// les attributs
...

// le contructeur
Boisson (String nom) { this.nom = nom;}

// autres méthodes
...
}

class Boissons {

public static void main (String args[]) {

// du code pour tester la classe Boisson
}
}

*****************************

Ensuite, j'ai un autre fichier "CaveAVins" qui fait également parti du
package com.eteks.test et qui a un moment fait appel à Boisson :

Boisson soda = new Boisson("soda");

Cette ligne déclenche une erreur de compilation "cannot find symbol"
symbol : class Boisson
symbol : class com.eteks.test.CaveAVin


Je ne peux résoudre le problème qu'en créant un fichier Boisson.java et
en mettent l'implémentation de la classe dedans avec le modificateur
"public" devant.


Est-ce normal ?
Oui

Car sur le CD fourni avec le bouquin, les fichiers sont comme j'ai
écrit, ils n'ont pas à subir cette modification.



D'autre part en renommant le fichier Boisson.java ( sans s ) et en
supprimant la classe Boissons dans le fichier ( la méthode main peut
rester dans la classe Boisson sans pb). Cela marchera.

Avatar
Xavier Tarrago
En java, on a en général une classe par fichier. Pour trouver une classe, le
loader cherche un fichier .class qui porte le nom de la classe ds le
répertoire correspondant au package de la classe? Par exemple
com.eteks.test.Boisson sera trouvée ds le répertoire
$classpath/com/eteks/test et ds un fichier Boisson.class. Si ce fichier
n'existe pas, on a l'erreur dite.

Je crois que les classes en plus ds les fichiers (comme ds ton exemple) ne
sont visibles que depuis le code situé ds le même fichier. Mais c'est une
pratique très peu répandue (en 5 ans de dév java professionnel, je n'ai
jamais vu ça!)

"olivier shawn" a écrit dans le message de
news: 456c4836$0$1064$
Bonjour,

j'apprends Java avec le livre des Cahiers du Programmeur.

Et j'ai un problème de compilation.

J'ai un fichier "Boissons.java" qui contient :

************* Boissons.java

package com.eteks.test;

class Boisson {
// les attributs
...

// le contructeur
Boisson (String nom) { this.nom = nom;}

// autres méthodes
...
}

class Boissons {

public static void main (String args[]) {

// du code pour tester la classe Boisson
}
}

*****************************

Ensuite, j'ai un autre fichier "CaveAVins" qui fait également parti du
package com.eteks.test et qui a un moment fait appel à Boisson :

Boisson soda = new Boisson("soda");

Cette ligne déclenche une erreur de compilation "cannot find symbol"
symbol : class Boisson
symbol : class com.eteks.test.CaveAVin


Je ne peux résoudre le problème qu'en créant un fichier Boisson.java et en
mettent l'implémentation de la classe dedans avec le modificateur "public"
devant.


Est-ce normal ?
Car sur le CD fourni avec le bouquin, les fichiers sont comme j'ai écrit,
ils n'ont pas à subir cette modification.