gpt4 book ai didi

java - 为什么将 (Object)null 结果强制转换为 not null?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:52:01 24 4
gpt4 key购买 nike

我使用 java 7,我创建了一个可变参数方法

public class JavaApplicationTest {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
addBundleMessage("b", Integer.SIZE, "key", (Object) null);
}

public static void addBundleMessage(String bundleName, Integer severity, String key, Object... params) {
if (params == null)
System.out.println("params Is null");
else
System.out.println("Params not null");
}
}

如果我不转换对象,IDE Netbeans 或 Eclipse 会提示但它会编译:

non-varargs call of varags method with inexact argument type for last parameter

No cast时:显示params Is null

当我将 null 转换为 (Object) 它显示 Params not null

当我将 null 转换为 (Object[]) 它显示 params Is null

这是正常行为吗?

最佳答案

是的,这是“正常”行为。

混淆来自后来被附加到语言中的可变参数,并使用数组作为“实际参数”来实现,以保存可变数量的参数。

public static void addBundleMessage(String bundleName, Integer severity,
String key, Object... params) {

几乎和

一样
public static void addBundleMessage(String bundleName, Integer severity,
String key, Object[] params) {

在幕后,参数以 Object[] 的形式包装传递。

但是,您仍然可以选择自己传入该数组。

如果您使用 (Object[]) null,您将获得一个参数(即 null)。

如果你使用(Object) null,它使用可变参数方法,所以它传入一个数组来保存参数(其中只有一个是null)。

对于可变参数方法的“正常使用”,params 永远不会为 null。您可以获得的“最差”是一个空数组(如果根本没有参数)。

关于java - 为什么将 (Object)null 结果强制转换为 not null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11097664/

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