当前位置: 首页 > 面试题库 >

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

韩博简
2023-03-14
问题内容

如果我有一个vararg Java方法foo(Object ...arg)并调用foo(null, null),则我arg[0]arg[1]as 都将null。但是,如果我呼叫foo(null),则arg其本身为null。为什么会这样呢?

我应该怎么称呼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规范 15.12.2.5节,它始终使用最特定的方法。 简介相当具体: 如果多个成员方法既可访问又可应用于方法调用,则必须选择一个成员方法来为运行时方法分派提供描述符。Ja

  • 问题内容: 我试图以反射方式在Java中调用此方法: 问题是我想将null传递为,以便foo变为null。 但是,在以下方法中,它假定没有参数,并且我得到(): 这是如何完成的? 问题答案: 尝试

  • 大家好,我正在使用Java反射来调用方法,并将参数传递给这些方法。下面是示例代码 用于调用方法的一段代码 其中test=“method1”/“method2”/“method3” obj是基类的对象 上面的代码抛出的是NOSuchmethodException

  • 我使用带有MVC模式的ASP. Net Core 3.1创建了一个全新的Visual Studio 2019 Web应用程序。 我的控制器有一个 HttpPost 方法,该方法应该有一个传入的 Json 对象(我使用 [FromBody] 作为传入参数)。 无论我尝试什么,传入的参数始终为 Null。我尝试将参数更改为字符串,并将模型修改为简单的 3 字段类,但它仍然显示为 null。 我使用Ch

  • 不幸的是: TweetServiceTest.java Hibernateutil.java