Есть ли способ узнать, действительно ли Java-функция (или конструктор), принимающая varargs, была вызвана с помощью varargs или с помощью массива?
Скажем, у меня есть следующее:
public class MyCompositeObjects {
MyObject[] objects;
MyCompositeObjects(MyObjects... objects) {
this.objects = Arrays.copyOf(objects,objects.length);
// or just: this.objects = objects; ?
}
// ...
}
Конструктор может быть вызван с помощью единственный аргумент MyObject []
, который может измениться позже, и если я не скопирую массив в конструкторе, эти изменения также будут применены к объектам переменных-членов
, верно? Однако, если конструктор вызывается с несколькими MyObject
s, нет другой ссылки на массив *, чтобы изменить его позже вне класса, поэтому я мог бы назначить его напрямую. Могу ли я сказать внутри конструктора (или вообще любой функции, которая принимает varargs), как он был вызван?
* nb: Есть ли для этого конкретное название? Это просто анонимный массив?