У меня есть два одинаковых класса, один из которых получает 1 параметр (позволяет указывать тип int), а второй получает один и тот же параметр дважды. Для обоих входных данных мне нужна одна и та же проверка (и исключение throw, если данные не являются хорошими), и оба класса будут иметь некоторую функциональность.
Я думал о создании супертипа, который будет иметь 2 конструктора, один с 1 параметром, а другой с двумя параметрами. Это будет работать, но вопрос, что нужно сделать в случае, если есть возможность иметь три или более параметра.
Поэтому я решил попробовать здесь, если есть лучший вариант.
Благодарю.
Что делать в случае наличия трех или более параметров?
Попробуйте с помощью Varargs, который взял произвольное количество значений, чтобы создать массив и поместить значения в массив до вызова метода/конструктора.
Прочтите главу здесь о Varargs от Eclipse.
arargs является вспомогательным синтаксисом и позволяет использовать переменное количество аргументов в вызове метода. В определении метода переменные aruguments обозначаются elipsis (...) и называются variable arity method
и variable arity parameter
в спецификации языка Java. При вызове метода varargs мы можем использовать любое количество аргументов типа, указанных и разделенных запятой.
public class VarArgSample {
static int sum(int i, int... marks) {
int total = 0;
for (int mark : marks) {
total = total + mark;
}
return total;
}
public static void main(String[] args) {
// invoking with variable arguments
System.out.println(sum(1, 2, 3));
// same invocation using an array
int arr[] = { 2, 3 };
System.out.println(sum(1, arr));
}
}
При вызове с переменными аргументами компилятор сопоставляет список аргументов слева направо с формальными параметрами. После того как начальный набор параметров согласован, то все оставшиеся аргументы строятся как массив и передаются методу.
В данном примере значение 1 'передается как аргумент для переменной' i, тогда нет других аргументов, оставшихся, кроме varargs. Таким образом, оставшиеся значения 2, 3 'строятся как массив и передаются как параметр. Таким образом достигается динамизм.
В вашем случае была возможность иметь три или более параметра, а затем попробуйте
MyClass(int i, int j, int... k){}