Почему Java не может найти моего конструктора?

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

В моем 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 от конструктора и это работает! Почему?

6
задан Roman 16 March 2010 в 14:32
поделиться

5 ответов

удалить void из сигнатуры

public ServiceResolver(int ifIndex, String serviceName, String regType, String domain) {
        this.ifIndex = ifIndex;
        this.serviceName = serviceName;
        this.regType = regType;
        this.domain = domain;
    }
9
ответ дан 8 December 2019 в 14:42
поделиться

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

Удалите void

5
ответ дан 8 December 2019 в 14:42
поделиться

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

Должно быть следующее:

public ServiceResolver(int ifIndex, String serviceName, String regType, String domain) {
        this.ifIndex = ifIndex;
        this.serviceName = serviceName;
        this.regType = regType;
        this.domain = domain;
    }
2
ответ дан 8 December 2019 в 14:42
поделиться

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

0
ответ дан 8 December 2019 в 14:42
поделиться

Добро пожаловать на ошибку, которую каждый однажды совершает. Как указывает Роман, вы должны удалить «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
ответ дан 8 December 2019 в 14:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: