Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
了解Java';瓦拉格斯酒店_Java_Variadic Functions - Fatal编程技术网

了解Java';瓦拉格斯酒店

了解Java';瓦拉格斯酒店,java,variadic-functions,Java,Variadic Functions,给定void foo(Boolean…bars)函数,bars的值的行为与以下函数调用中的值明显不同: foo(),bar=Boolean[0] foo(null),bar=null foo(null,null),bar=Boolean[2]{null,null} 为什么调用foo(null)会产生bar=null而不是Boolean[1]{null}? 这是在Java 8上复制的。这是因为采用了三阶段方法: 确定通过严格调用适用的匹配Arity方法 确定松散调用适用的匹配Arity方法 确

给定
void foo(Boolean…bars)
函数,
bars
的值的行为与以下函数调用中的值明显不同:

  • foo(),
    bar=Boolean[0]
  • foo(null),
    bar=null
  • foo(null,null),
    bar=Boolean[2]{null,null}
为什么调用foo(null)会产生
bar=null
而不是
Boolean[1]{null}

这是在Java 8上复制的。

这是因为采用了三阶段方法:

  • 确定通过严格调用适用的匹配Arity方法
  • 确定松散调用适用的匹配Arity方法
  • 确定变量Arity调用适用的方法
  • foo(null)
    在第1阶段匹配,因为接受
    Boolean[]
    的方法允许使用单个null参数,因为您可以将
    null
    强制转换为
    Boolean[]
    (或者,实际上,任何引用类型)


    foo(null,null)
    在第3阶段匹配,因为这是匹配变量arity方法的时候。假设没有2-arg重载
    foo
    ,则在此之前无法进行匹配,因为匹配方法需要两个参数。

    这是因为采用了三阶段方法:

  • 确定通过严格调用适用的匹配Arity方法
  • 确定松散调用适用的匹配Arity方法
  • 确定变量Arity调用适用的方法
  • foo(null)
    在第1阶段匹配,因为接受
    Boolean[]
    的方法允许使用单个null参数,因为您可以将
    null
    强制转换为
    Boolean[]
    (或者,实际上,任何引用类型)


    foo(null,null)
    在第3阶段匹配,因为这是匹配变量arity方法的时候。假设您没有
    foo
    的2-arg重载,则在此之前无法对其进行匹配,因为匹配方法将需要两个参数。

    我希望您得到一个编译器警告。您可以将显式数组传递给varargs参数,对于
    foo(null)
    ,您可以猜测这就是您要做的。我希望您能得到编译器的警告。您可以将显式数组传递给varargs参数,对于
    foo(null)
    ,您可以猜测这就是您要做的。