Вам не нужно использовать varargs, вы можете использовать массив в качестве входного параметра, varargs - это просто новый модный синтаксис для параметра массива, но он поможет вам избежать создания собственного массива ввызывающий класс.
т.е. varargs позволяют (parm1, parm2) быть принятым в структуру массива
Вы не можете использовать интерфейс для принудительного применения Конструктора, вам, вероятно, следует использовать общий абстрактный суперкласс с нужным конструктором,
public abstract class Supa {
private Supa[] components = null;
public Supa(Supa... args) {
components = args;
}
}
public class TestClass extends Supa {
public TestClass(Supa... args) {
super(args);
}
public static void main(String[] args) {
Supa supa = new TestClass(new Class1(4), new Class2(5));
// Class1 & Class2 similarly extend Supa
}
}
Также см. Шаблон комбинированного дизайна http://en.wikipedia.org/wiki/Composite_pattern