Java 传递null时选择哪个构造函数?
在下面的示例中,我有两个构造函数:一个接受字符串,另一个接受自定义对象。在这个自定义对象上存在一个返回字符串的方法“getId()”Java 传递null时选择哪个构造函数?,java,constructor,null,Java,Constructor,Null,在下面的示例中,我有两个构造函数:一个接受字符串,另一个接受自定义对象。在这个自定义对象上存在一个返回字符串的方法“getId()” public class ConstructorTest { private String property; public ConstructorTest(AnObject property) { this.property = property.getId(); } public ConstructorTest(String property)
public class ConstructorTest {
private String property;
public ConstructorTest(AnObject property) {
this.property = property.getId();
}
public ConstructorTest(String property) {
this.property = property;
}
public String getQueryString() {
return "IN_FOLDER('" + property + "')";
}
}
如果我将null传递给构造函数,那么选择哪个构造函数,为什么?在我的测试中,选择了字符串构造函数,但我不知道是否总是这样以及为什么
我希望有人能为我提供一些见解
提前感谢。Java使用了根据参数可以找到的最具体的构造函数。
PS:如果您添加构造函数(InputStream),编译器将因为歧义而抛出错误-它无法知道更具体的是什么:字符串还是InputStream,因为它们位于不同的类层次结构中。通过执行此操作:
ConstructorTest test = new ConstructorTest(null);
编译器将抱怨说:
构造函数ConstructorTest(一个对象)
这是模棱两可的
JVM无法选择调用哪个构造函数,因为它无法识别与该构造函数匹配的类型(请参阅:)
您可以通过键入参数调用特定的构造函数,如:
ConstructorTest test = new ConstructorTest((String)null);
或
更新:由于@OneWorld,可以访问相关链接(撰写本文时最新的链接)。编译器将生成错误。绝对不正确。我会帮你省去否决这个答案的负担。为什么不呢?如果你有什么要说的,请解释一下。我没有仔细阅读整个问题。在你的情况下,你不需要添加任何东西-会有一个错误,因为一个对象不能是字符串的子类。我仍然没有在我的帖子中看到错误,除了在PS中,我不知道一个对象。原理仍然是一样的。
如果您添加构造函数(InputStream),编译器将因为歧义而抛出错误。这如何适用于OP提供的示例?你应该进一步详细说明。你是对的,我在测试中犯了一个错误,这就是为什么编译器错误没有出现。你是对的,我在测试中犯了一个错误,这就是为什么编译器错误没有出现。铸造null,谁知道呢!
ConstructorTest test = new ConstructorTest((AnObject)null);