vararg 参数可以是 <?超级 Object>?
Can a vararg parameter be of type <? super Object>?
我正在编写一个方法来检查我的方法的参数是否为空,我刚刚开始接受可变参数的想法,所以我写了一个很酷的 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");
}
}
}
但我越来越贪心了。如果我需要在一次会议中检查String
、List
和int
,这意味着我必须在调用方法中这样写:
checksIfNull(myString);
checksIfNull(myList);
checksIfNull(myInt);
我想知道是否有一种方法可以让我每次都只需要调用 null-checking 方法一次与通用参数结合使用。我觉得可能有 - 但我的语法可能有误。我已经尝试了以下的一些组合,但它从来没有完全奏效:
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");
}
}
}
我 T<? super Object>... t
的右手参数告诉我“类型 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");
}
}
}
我正在编写一个方法来检查我的方法的参数是否为空,我刚刚开始接受可变参数的想法,所以我写了一个很酷的 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");
}
}
}
但我越来越贪心了。如果我需要在一次会议中检查String
、List
和int
,这意味着我必须在调用方法中这样写:
checksIfNull(myString);
checksIfNull(myList);
checksIfNull(myInt);
我想知道是否有一种方法可以让我每次都只需要调用 null-checking 方法一次与通用参数结合使用。我觉得可能有 - 但我的语法可能有误。我已经尝试了以下的一些组合,但它从来没有完全奏效:
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");
}
}
}
我 T<? super Object>... t
的右手参数告诉我“类型 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");
}
}
}