Почему Java не может найти мой конструктор? - PullRequest
6 голосов
/ 16 марта 2010

Ну, может быть, это глупый вопрос, но я не могу решить эту проблему.

В моем ServiceBrowser классе у меня есть эта строка:

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

И компилятор жалуется на это. Там написано:

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

Это странно, потому что у меня есть конструктор в ServiceResolver:

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

ДОБАВЛЕНО: Я удалил void из конструктора, и это работает! Зачем?

Ответы [ 5 ]

9 голосов
/ 16 марта 2010

удалить недействительным из подписи

public ServiceResolver(int ifIndex, String serviceName, String regType, String domain) {
        this.ifIndex = ifIndex;
        this.serviceName = serviceName;
        this.regType = regType;
        this.domain = domain;
    }
5 голосов
/ 16 марта 2010

Вы определили метод, а не конструктор.

Удалить void

2 голосов
/ 16 марта 2010

Это не конструктор ... это простой метод, который ничего не возвращает. Абсолютно ничего!

Должно быть так:

public ServiceResolver(int ifIndex, String serviceName, String regType, String domain) {
        this.ifIndex = ifIndex;
        this.serviceName = serviceName;
        this.regType = regType;
        this.domain = domain;
    }
0 голосов
/ 16 марта 2010

Добро пожаловать на ошибку, которую каждый совершает один раз.Как указывает Роман, вы должны удалить «void» из переднего края конструктора.

Конструкторы не объявляют тип возвращаемого значения - что может показаться странным, поскольку вы делаете такие вещи, как x = new X ();но вы можете рассмотреть это следующим образом:

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

Хороший набор инструментов для поиска ошибок такого рода (и многих других):

Таким образом, когда вы делаете другие распространенные ошибки (вы будете,мы все это делаем :-), вы не будете так крутить колеса в поисках решения.

0 голосов
/ 16 марта 2010

Java-конструкторы не имеют возвращаемых типов в своей подписи - они неявно возвращают экземпляр класса.

...