我有一个varargs方法,我想使用1或0参数调用该方法。 以下代码编译,但无法正确运行:
final List<MyMessage> allMessages = new ArrayList<MyMessage>();
MyMessage message = null;
if (checkSomeCondition()) {
message = new MyMessage(someParam);
allMessages.add(message);
}
int size = allMessages.size();
MyMessage[] msgArrayType = new MyMessage[size]; // ERROR
MyMessage[] msgArray = allMessages.toArray(msgArrayType);
callFunc(msgArray);
...........
public void callFunc(MyMessage... messages) {
}
当我调试代码时,在我使用//ERROR
标记的行之后,数组msgArrayType
的值为com.sun.jdi.ClassNotLoadedException: Type has not been loaded occurred while retrieving component type of array.
这也是错误的:
MyMessage[] msgArray = (MyMessage[]) allMessages.toArray();
// -> java.lang.Object cannot be cast to .......MyMessage
我真的不明白,因为allMessages
是List
的{{1}}!
我看到的唯一选择是使用
之类的东西MyMessage
但我想知道如果我只想写一次if (message == null) {
callFunc();
} else {
callFunc(message);
}
,代码会是什么样子。有什么建议吗?
答案 0 :(得分:-2)
如果你想使用除了数组之外的varargs
,你还应该确保传递的元素是非空的。
因此,如果您只想使用callfunc()
的一个函数调用而不想使用if-else
块进行包围,则可以使用以下函数调用。
callfunc(message == null ? (Object)null : message);
这将传入包含在数组中的消息对象,或者它将传递一个包含单个null元素的数组。