Java: выяснить, была ли функция вызвана с помощью varargs или массива

Есть ли способ узнать, действительно ли 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: Есть ли для этого конкретное название? Это просто анонимный массив?

7
задан arne.b 25 March 2011 в 14:40
поделиться