Java vararg参数的类型是否为<;?超级对象>;?
我正在写一个方法来检查我的方法的参数是否为null,我刚刚接受了varargs的思想,所以我写了一个很酷的catch-all方法: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
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");
}
}
}