gpt4 book ai didi

java - 带有 null 的方法重载选择

转载 作者:搜寻专家 更新时间:2023-11-01 01:37:50 25 4
gpt4 key购买 nike

给定这段代码:

class Overloading
extends Object
{

static public void target(Object val, String chk) { System.out.println("Object["+val+"] :: Should be "+chk); }
static public void target(String val, String chk) { System.out.println("String["+val+"] :: Should be "+chk); }

static public void main(String[] args) {
Object obj=null;

target(null ,"Object");
target((Object)null,"Object");
target(obj ,"Object");
}
}

输出(出乎意料地)如下:

String[null] :: Should be Object
Object[null] :: Should be Object
Object[null] :: Should be Object

问题出在第一行,我希望它与其他两行相同。此外,我发誓直到最近,编译器还会给我一个普通 null 调用的模糊调用警告。然而,使用 Java 5 和 6 进行编译和测试会产生相同的结果。

这对我来说是一个重要问题,因为我有很多代码使用这种模式,即使用不同类型的重载“默认”参数来选择返回类型并推断所需的转换/解析。谁能解释一下这是怎么回事?

最佳答案

Java 一直以相同的方式工作:始终选择“最具体”的适用重载。由于 StringObject 的子类,因此它“更具体”,因此选择了 String 重载。如果重载是为了 StringInteger,并且您试图传递 null,那么您确实会遇到编译时歧义错误,因为它们都处于同一继承层次结构的同一级别。

关于java - 带有 null 的方法重载选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7198927/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com