Java varags在另一个vararg方法中调用vararg方法时没有检测到

Cha*_*nil 10 java methods variadic-functions

我已经实现了Java方法来解决IN和OR条件.

以下是我的代码.

public static <T> boolean in(T parameter, T... values) {
    if (null != values) {
        System.out.println("IN values size.. " + values.length);
        return Arrays.asList(values).contains(parameter);
    }
    return false;
}

public static boolean or(boolean... values) {
    System.out.println("OR values size.. " + values.length);
    return in(true, values);
}

public static void main(String[] args) {
    System.out.println(or(false, true, false));
}
Run Code Online (Sandbox Code Playgroud)

输出是:

OR values size.. 3
IN values size.. 1
false
Run Code Online (Sandbox Code Playgroud)

但我期待以下输出:

OR values size.. 3
IN values size.. 3
true
Run Code Online (Sandbox Code Playgroud)

我不明白为什么varargs在in方法中的大小为1 .

Sur*_*tta 5

在方法中

in(T parameter, T... values) //in(true, values); // values is T
Run Code Online (Sandbox Code Playgroud)

当你传递一个布尔数组时values,整个数组作为单个元素,T这就是显示它的原因1.

您正在传递布尔数组,接收类型是T,每个元素都被视为一个数组.

您可以在方法中打印值,看看结果是什么.你会看到一个数组对象.不是单独的布尔元素.