2010-03-16 26 views
6

Bueno, tal vez es una pregunta estúpida, pero no puedo resolver este problema.¿Por qué Java no puede encontrar mi constructor?

En mi clase ServiceBrowser que tienen esta línea:

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

y el compilador se queja de ello. Dice:

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

Esto es extraño, porque tienen un constructor en el ServiceResolver:

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

añadido: Quité void desde el constructor y funciona! ¿Por qué?

+2

'void' debe ser usado para métodos, no para constructores. – BalusC

+0

@Roman ¿acabas de responder tu propia pregunta con una cuenta diferente? – Bozho

+0

@Bozho, No. Otro romano es otra persona. – Roman

Respuesta

9

sin efecto de eliminación de la firma

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

ha definido un método, no un constructor.

Retire la void

+0

Bonho, otro romano es otra persona. No respondo mi pregunta desde otra cuenta. – Roman

2

Eso es ningún constructor ... es un método sencillo que no devuelve nada. ¡Absolutamente nada!

En caso de ser esto: constructores

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

Java no tienen tipos de retorno en su firma - implícitamente devuelven una instancia de la clase.

0

¡Bienvenido al error que todos hacen una vez! Como señala Roman, debes eliminar "void" delante del constructor.

Los constructores declaran que no existe un tipo de devolución, lo que puede parecer extraño ya que usted hace cosas como x = new X(); pero se puede considerar como esto:

// 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 buen conjunto de herramientas que correr para encontrar este tipo de error (y muchos otros) son:

De esta manera, cuando comete otros errores comunes (lo hará, todos lo hacemos :-), no girarás las ruedas tanto buscando la solución.

Cuestiones relacionadas