我在源文件中看到以下代码。它是一个构造函数,但我不明白代码this(null)
在这里的含义。
public DefaultFurnitureCatalog() {
this((File)null);
}
任何人都可以提供帮助吗?
答案 0 :(得分:6)
它在具有单个File
参数
答案 1 :(得分:0)
这意味着调用一个重载的构造函数,它接受某种Object
但你没有传递一个对象,而是一个普通的null
。
答案 2 :(得分:0)
它使用null参数调用构造函数public DefaultFurnitureCatalog(File f)
。
为什么?因此public DefaultFurnitureCatalog()
将使用与public DefaultFurnitureCatalog(File f)
相同的逻辑。
答案 3 :(得分:0)
来自Java Doc Using the this Keyword
在构造函数中,您还可以使用this关键字来调用同一个类中的另一个构造函数。这样做称为显式构造函数调用。
因此它将调用具有单个File参数的同一对象的另一个构造函数。如下:
public class DefaultFurnitureCatalog{
public DefaultFurnitureCatalog() {
this((File)null); // this will call below constructor
}
public DefaultFurnitureCatalog(File file) {
// doing something
}
}
答案 4 :(得分:0)
条件1:
来自Oracle Java教程:
在构造函数中,您还可以使用this关键字来调用同一个类中的另一个构造函数。这样做称为显式构造函数调用。
如果存在,则另一个构造函数的调用必须是构造函数中的第一行。
因此,在显式构造函数调用之前,无法创建指向null的File引用。
例如:下面的代码抛出编译错误:对此的调用必须是构造函数中的第一个语句
public class Hello {
public Hello() {
File file = null;
this(file);
System.out.println("hello - 1");
}
public Hello(File file) {
System.out.println("hello - 2");
}
public Hello(String str) {
System.out.println("hello - 3");
}
public static void main(String[] args) {
Hello h = new Hello();
}
}
条件2:
检查你的代码,你有多个构造函数接受一个Object类型的输入参数(通常)吗?
例如,下面的代码抛出编译错误:对Hello的引用是不明确的,Hello中的构造函数Hello(File)和Hello匹配中的构造函数Hello(String)public class Hello {
public Hello() {
this(null);
System.out.println("hello - 1");
}
public Hello(File file) {
System.out.println("hello - 2");
}
public Hello(String str) {
System.out.println("hello - 3");
}
public static void main(String[] args) {
Hello h = new Hello();
}
}
为避免歧义,请将null类型转换为如下:
public class Hello {
public Hello() {
this((File)null);
System.out.println("hello - 1");
}
public Hello(File file) {
System.out.println("hello - 2");
}
public Hello(String str) {
System.out.println("hello - 3");
}
public static void main(String[] args) {
Hello h = new Hello();
}
}
希望,这有帮助