null - 使用单个空参数调用 Java varargs 方法?

标签 null language-design java variadic-functions

如果我有一个可变参数 Java 方法 foo(Object ...arg)我调用 foo(null, null) ,我都有arg[0]arg[1]作为 null s。但是如果我调用 foo(null) , arg本身为空。为什么会这样?

如何调用foo这样 foo.length == 1 && foo[0] == nulltrue ?

最佳答案

问题在于,当您使用文字 null 时,Java 不知道它应该是什么类型。它可以是一个空对象,也可以是一个空对象数组。对于单个参数,它假定后者。

你有两个选择。将 null 显式转换为 Object 或使用强类型变量调用方法。请参见下面的示例:

public class Temp{
   public static void main(String[] args){
      foo("a", "b", "c");
      foo(null, null);
      foo((Object)null);
      Object bar = null;
      foo(bar);
   }

   private static void foo(Object...args) {
      System.out.println("foo called, args: " + asList(args));
   }
}

输出:

foo called, args: [a, b, c]
foo called, args: [null, null]
foo called, args: [null]
foo called, args: [null]

关于null - 使用单个空参数调用 Java varargs 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4028059/

相关文章:

python - Pandas - 检查系列中的所有值是否都是 NaN

php - 如何使用 Php 删除查询字符串 URL 中的空字节?

web-services - 使用标志来识别口语

.net - 类型类有什么问题?

java - Cobertura 未显示继承类的覆盖范围

time - Go 中 time.Time 的 `zero` 值是多少?

ios - 创建 XML 时如何有效检查 NSDictionary 键是否有值

python - 连接列表和分割字符串

Java:如何在程序中使用键盘

java - Jpa @Transactional 不回滚