2010-03-16 5 views
6

Eh bien, peut-être que c'est une question stupide, mais je ne peux pas résoudre ce problème.Pourquoi Java ne peut pas trouver mon constructeur?

Dans ma ServiceBrowser classe I ont cette ligne:

ServiceResolver serviceResolver = new ServiceResolver(ifIndex, serviceName, regType, domain); 

Et compilateur se plaint à ce sujet. Il dit:

cannot find symbol 
symbol : constructor ServiceResolver(int,java.lang.String,java.lang.String,java.lang.String) 

Ceci est étrange, parce que j'ai un constructeur dans le ServiceResolver:

public void ServiceResolver(int ifIndex, String serviceName, String regType, String domain) { 
     this.ifIndex = ifIndex; 
     this.serviceName = serviceName; 
     this.regType = regType; 
     this.domain = domain; 
    } 

AJOUTÉE: j'ai enlevé void du constructeur et il fonctionne! Pourquoi?

+2

'void' est à utiliser pour les méthodes, pas pour les constructeurs. – BalusC

+0

@Roman Avez-vous répondu à votre question avec un autre compte? – Bozho

+0

@Bozho, Non. Un autre Romain est une autre personne. – Roman

Répondre

9

vide suppression de la signature

public ServiceResolver(int ifIndex, String serviceName, String regType, String domain) { 
     this.ifIndex = ifIndex; 
     this.serviceName = serviceName; 
     this.regType = regType; 
     this.domain = domain; 
    } 
5

Vous avez défini une méthode, pas un constructeur.

Retirez le void

+0

Bonho, un autre Romain est une autre personne. Je ne réponds pas à ma question d'un autre compte. – Roman

2

C'est pas de constructeur ... c'est une méthode simple qui ne retourne rien. Absolument rien!

devrait être ceci:

public ServiceResolver(int ifIndex, String serviceName, String regType, String domain) { 
     this.ifIndex = ifIndex; 
     this.serviceName = serviceName; 
     this.regType = regType; 
     this.domain = domain; 
    } 
0

Java constructeurs ne sont pas les types de retour sur leur signature - ils reviennent implicitement une instance de la classe.

0

Bienvenue à l'erreur que tout le monde fait une fois. Comme le souligne Roman, vous devez supprimer "void" en face du constructeur.

Les constructeurs ne déclarent aucun type de retour - ce qui peut sembler étrange puisque vous faites des choses comme x = new X(); mais vous pouvez le considérer comme ceci:

// what you write... 
public class X 
{ 
    public X(int a) 
    { 
    } 
} 

x = new X(7); 

// what the compiler does - well sort of... good enough for our purposes. 
public class X 
{ 
    // special name that the compiler creates for the constructor 
    public void <init>(int a) 
    { 
    } 
} 

// this next line just allocates the memory 
x = new X(); 

// this line is the constructor 
x.<init>(7); 

Un bon ensemble d'outils pour courir pour trouver ce genre d'erreur (et bien d'autres) sont:

De cette façon, lorsque vous faites d'autres erreurs communes (vous allez, nous le faisons tous :-), vous ne tournerez pas vos roues tellement à la recherche de la solution.

Questions connexes