好吧,也许这是一个愚蠢的问题,但我无法解决这个问题。
在我的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
并且它有效!为什么?
答案 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);
为了找到这种错误而运行的一组好工具(以及许多其他错误)是:
那样当你犯其他常见错误时(你会,我们都会这样做:-),你不会那么多地转动你的车轮寻找解决方案。