2010-03-16 21 views
6

Nun, vielleicht ist es eine dumme Frage, aber ich kann dieses Problem nicht lösen.Warum Java meinen Konstruktor nicht finden kann?

In meiner ServiceBrowser Klasse habe ich diese Zeile:

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

Und Compiler beschwert sich darüber. Dort heißt es:

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

Das ist seltsam, weil ich in der ServiceResolver einen Konstruktor zu tun haben:

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

ZUSÄTZLICH: I void vom Konstruktor entfernt und es funktioniert! Warum?

+2

'void' ist für Methoden zu verwenden, nicht für Konstruktoren. – BalusC

+0

@Roman hast du deine eigene Frage mit einem anderen Konto beantwortet? – Bozho

+0

@Bozho, Nein. Ein anderer Römer ist eine andere Person. – Roman

Antwort

9

löschen Leere von der Unterzeichnung

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

Sie haben eine Methode, kein Konstruktor definiert.

die void

+0

Bonho, ein anderer Römer ist eine andere Person. Ich beantworte meine Frage nicht von einem anderen Konto. – Roman

2

entfernen, die keinen Konstruktor ist ... es ist eine einfache Methode, die nichts zurückgibt. Absolut gar nichts!

Sollte dies sein:

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

Java Konstrukteuren nicht Rückgabetypen auf ihre Unterschrift haben - sie implizit eine Instanz der Klasse zurück.

0

Willkommen zu dem Fehler, den jeder einmal macht. Wie Roman betont, müssen Sie "void" vor dem Konstruktor löschen.

Konstruktoren deklarieren keinen Rückgabetyp - was seltsam erscheinen mag, da Sie Dinge wie x = new X(); aber man kann es so betrachten:

// 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); 

Ein guter Satz von Werkzeugen zu laufen, diese Art von Fehler zu finden (und viele andere) sind:

Auf diese Weise, wenn Sie andere häufige Fehler machen (Sie werden, wir alle tun :-), du wirst deine Räder nicht so sehr nach der Lösung suchen.

Verwandte Themen