Is there a way to find out whether a Java function (or a constructor) that takes varargs was actually called with varargs or with an array?
Say I have the following:
The only way to know is to parse the code. This is because varargs is basicaly a compile time feature and doesn't change how the program runs.
If in doubt, I would always copy the array. Unless you know this will be a performance issue.
BTW: You can do the following.
MyCompositeObjects(MyObjects o1, MyObjects... objects) {
MyCompositeObjects(MyObjects[] objects) {
However, this likely to do the opposite of what you want.
Another option is to use a static factory.
private MyCompositeObjects(MyObjects[] objects) {
this.objects = objects;
}
MyCompositeObjects create(MyObjects... objects) {
return new MyCompositeObjects(objects.close());
}
MyCompositeObjects createNotCopied(MyObjects... objects) {
return new MyCompositeObjects(objects, false);
}
Use the more cumbersome method name for the less safe version. This means if a method is chosen without much thought, the safe version is more likely to be used.