为什么在Java中传递null给带参数的构造函数?

xmq68pz9  于 2023-06-28  发布在  Java
关注(0)|答案(1)|浏览(105)

鉴于这些婴儿课程

public class Domain<V> {
    public Domain(V v) {} // (1)
    public Domain() {}    // (2)
}

public class User {}

还有一个客户

public class App {
    public static void main( String[] args )
    {
        Domain<User> d1 = new Domain<>(new User());
        Domain<User> d2 = new Domain<>(null);
    }
}

它会命中哪个构造函数,(1)还是(2)?
曲名:It One
这背后有什么故事?这意味着,null实际上什么都不是,仍然是一个参数还是什么?

jm81lzqq

jm81lzqq1#

为了让它更直观,试着这样看:

public class App {
    public static void main(String[] args) {
        User user = getUserFromSomewhere(); // This potentially returns null!
        Domain<User> d1 = new Domain<>(user);
        Domain<User> d2 = new Domain<>(null);
    }
}

不管user是否为null(假设我们不知道它),对于Java来说,它总是意味着运行构造函数(1),因为null仍然是一个值,即使它在语义上意味着“无”。你可以把它想象成把一个整数0传递给某个函数。
此外,你的构造函数可能有这样的逻辑:

public class Domain<V> {
    public Domain(V v) {
        if (v == null)
            System.out.println("Hello");
        else
            System.out.println("World");
    }
    public Domain() {} 
}

如果Java运行第二个构造函数,您将无法使用这样的逻辑。

相关问题