Теоретически, вы могли бы объявить конструктор примерно так:
MyClass(Object args) {
if (args instanceof List) {
...
} else if (args instanceof Set) {
...
} else if (args.getClass().isArray()) {
...
} else {
thrown new IllegalArgumentException("arg's type is wrong");
}
}
, но IMO, это было бы плохим дизайном API, так как он переводит все проверки типов во время выполнения.(Нет другого способа сделать это с одним конструктором. Единственный общий супертип типов массива и интерфейса Collection
- Object
.)
Гораздо лучше использовать перегрузку конструктора, как описано вдругие ответы.
Кстати, следующее (из вашего примера) является синтаксической ошибкой Java, независимо от объявленных типов аргументов конструктора:
MyClass c = new MyClass({"rat", "Dog", "Cat"});
Эта форма инициализатора массива может использоваться только в переменнойзаявление;например,
String[] foo = {"rat", "Dog", "Cat"};
или как часть выражения создания массива;например,
String[] foo = new String[]{"rat", "Dog", "Cat"};
String[][] bar = new String[][]{{"rat", "Dog", "Cat"}, /* ... */};