为什么Java找不到我的构造函数?

时间:2010-03-16 14:32:07

标签: java constructor compilation

好吧,也许这是一个愚蠢的问题,但我无法解决这个问题。

在我的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 个答案:

答案 0 :(得分:9)

从签名中删除

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

答案 1 :(得分:5)

您已经定义了一个方法,而不是一个构造函数。

删除void

答案 2 :(得分:2)

这不是构造函数......这是一个不返回任何内容的简单方法。绝对没有!

应该是这样的:

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

答案 3 :(得分:0)

Java构造函数在其签名上没有返回类型 - 它们隐式返回类的实例。

答案 4 :(得分:0)

欢迎大家一次犯下的错误。正如Roman指出的那样,你必须从构造函数的前面删除“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);

为了找到这种错误而运行的一组好工具(以及许多其他错误)是:

那样当你犯其他常见错误时(你会,我们都会这样做:-),你不会那么多地转动你的车轮寻找解决方案。