Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.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 vararg参数的类型是否为<;?超级对象>;?_Java_Generics_Variadic Functions - Fatal编程技术网

Java vararg参数的类型是否为<;?超级对象>;?

Java vararg参数的类型是否为<;?超级对象>;?,java,generics,variadic-functions,Java,Generics,Variadic Functions,我正在写一个方法来检查我的方法的参数是否为null,我刚刚接受了varargs的思想,所以我写了一个很酷的catch-all方法: private <T> void checksIfNull(T... t) throws NullPointerException { for (T myT : t) { if ( myT == null) { throw new NullPointerException("Attempted to pas

我正在写一个方法来检查我的方法的参数是否为null,我刚刚接受了varargs的思想,所以我写了一个很酷的catch-all方法:

private <T> void checksIfNull(T... t) throws NullPointerException {
    for (T myT : t) {
        if ( myT == null) {
            throw new NullPointerException("Attempted to pass a null object");
        }
    }
}
我想知道是否有一种方法,我只需要调用null检查方法一次,并结合使用一个泛型参数。我觉得可能有-但我可能有语法错误。我尝试了以下几种组合,但始终没有完全奏效:

private <T> void checksIfNull(T<? super Object>... t) throws NullPointerException {
    for (T myT : t) {
        if ( myT == null) {
            throw new NullPointerException("Attempted to pass a null object");
        }
    }
}

private void checksIfNull(T泛型在这里没有添加任何值。拥有
T…T
意味着参数类型之间存在一些共性,这是您试图避免的。您可以简单地使用
Object…

private void checksIfNull(Object... values) throws NullPointerException {
    for (Object value: values) {
        if (value == null) {
            throw new NullPointerException("Attempted to pass a null object");
        }
    }
}

泛型不能处理像
int
这样的基本类型,为什么不直接使用
Object
作为类型,而不用担心泛型呢?在这里使用泛型有什么意义?你既不关心也不使用泛型类型
t
。只要使用
Object…
就可以了。当然,谢谢大家。哈哈,不用担心:)通常情况下,最好的问题是在解决问题的过程中有一个小小的脱节。我还建议将该方法重命名为
requirennoull(Object…values)
。这个约定与
Objects
类提供的类似的单参数静态方法是一致的。我在别处见过这个方法。我可以只@override它吗?@NateH06只有当你从包含该方法的类继承,并且该方法不是静态的或私有的。不,它是一个静态方法。明白了,我可以直接调用
Object.requirennoull(String/Integer/等等)
。谢谢
private void checksIfNull(Object... values) throws NullPointerException {
    for (Object value: values) {
        if (value == null) {
            throw new NullPointerException("Attempted to pass a null object");
        }
    }
}