2009-12-07 5 views
-1
package package.b; 
class ClassB { 

public ClassB(BaseClass bc, XMLBase obj1) { } 
} 

import package.b.ClassB; 

class A extends BaseClass { 

    public void function() { 
     TestXML obj1 = new TestXML(); 

     ClassB bObj = new ClassB(this, obj1); 
    } 

} 

Lorsque je compile le code ci-dessus, je reçois une erreur "ne peut pas trouver le symbole symbole: constructeur ClassB (ClassA, Object1)"Pourquoi Java ne peut-il pas trouver ce constructeur?

Mais quand je passe "null" pour les deux arguments, il compile bien.

Pourquoi cela?

Quelqu'un peut-il m'aider?

TIA

+3

Est-ce que 'obj1' est défini? Si oui, à quoi? –

+0

s, obj1 est défini. J'ai fourni une image claire cette fois. voir au dessus. obj1 est de type TestXML, qui étend XMLBase – Hari

+1

'package' n'est pas un nom de package valide. Est-ce le vrai code? – harto

Répondre

1

Cela devrait compiler moins qu'il y ait d'autres erreurs par exemple TestXML n'est pas une classe valide ou ne s'étend pas à XMLBase comme vous le dites. Sans la définition complète de la classe, cela ne peut pas être aidé.

2

Les deux classes sont dans des packages différents et ont la visibilité (par défaut) du package, par conséquent, elles ne peuvent pas se voir. Faire B du public et il devrait être bien:

public class ClassB { 
    //blabla 
} 
+0

Je suppose que ce n'est pas le problème, car sinon, il ne serait pas compilé lorsque "null" était utilisé pour les deux arguments. Notez que la classe A * ne doit pas être publique de toute façon - ClassB ne s'y réfère pas directement, donc cela n'a pas d'importance. –

+0

vous avez raison pour A, l'édition. – Jerome

+0

Et pour la classe B, comment expliquez-vous le constructeur avec deux arguments nuls qui fonctionnent, sauf si en réalité c'est déjà public? –

3

Votre message d'erreur ne correspond pas au constructeur appel que vous avez montré. Vous avez:

// In the code 
public ClassB(BaseClass bc, XMLBase obj1) 

// In the error message 
ClassB(ClassA, Object1) 

Qu'est-ce Object1, ce qui est XMLBase, et ce qui est TestXML?

De plus, il y a le nom de paquet invalide comme Vinegar a été signalé. Si vous pouviez produire un exemple complet, mais qui échoue, cela aiderait. À l'heure actuelle, il semble que vous utilisiez des versions réduites de quelques classes, mais les nommant de manière incohérente, ce qui rend beaucoup plus difficile de déterminer ce qui se passe.

De même, est ClassB public? Ce n'est pas dans votre exemple de code, mais vous l'importez, ce qui veut probablement dire que c'est dans un paquet différent ... cela ne fonctionnera pas, car l'accès par défaut est limité au code dans le même paquet. Compte tenu de votre commentaire à ce sujet de travailler si vous passez en null, je le soupçonne est public (ou l'importation est non pertinente) - encore une fois, un complet exemple serait vraiment aider.

Questions connexes