I have a varargs method and I want to call the method using 1 or 0 arguments. The following code compiles, but does not run correctly:
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) {
}
When I debug the code, after the line that I marked with //ERROR
, the value of the array msgArrayType
is com.sun.jdi.ClassNotLoadedException: Type has not been loaded occurred while retrieving component type of array.
This is also wrong:
MyMessage[] msgArray = (MyMessage[]) allMessages.toArray();
// -> java.lang.Object cannot be cast to .......MyMessage
I really don't understand it, because allMessages
is a List
of MyMessage
s!
The only option I see is to use something like
if (message == null) {
callFunc();
} else {
callFunc(message);
}
but I was wondering how the code would look like if I want to write callFunc
only once. Any suggestions?