Java 传递null时选择哪个构造函数?

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)

在下面的示例中,我有两个构造函数:一个接受字符串,另一个接受自定义对象。在这个自定义对象上存在一个返回字符串的方法“getId()”

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