Я пишу простой универсальный класс утилит, который предоставляет конструктор, который принимает аргумент T [].Я хотел бы установить второй конструктор, который принимает аргумент String, но использует первый конструктор как часть установки.
public class PermGenerator<T> {
private final T[] values;
public PermGenerator(T[] vals) {
values = Arrays.copyOf(vals, vals.length);
}
public PermGenerator(String str) {
this(str.chars().mapToObj(c -> (char)c).toArray(Character[]::new));
}
Я бы ожидал, что второй конструктор отобразит String в массив символови затем вызовите первый конструктор.
Вместо этого компилятор Java жалуется, что не может быть найден подходящий конструктор.
Можно ли это реструктурировать, чтобы выполнить то, что я имею в виду?Спасибо.
Вот один подход, который может быть приемлемым.Предоставьте статический вспомогательный метод для преобразования строки в массив символов.Не так гладко, как C ++, но он будет работать:
public static final Character[] asArray(String str) {
return str.chars().mapToObj(c -> (char)c).toArray(Character[]::new);
}
Таким образом, для создания класса пользователю потребуется использовать следующий синтаксис:
PermGenerator gen = new PermGenerator(PermGenerator.asArray("ACBC"));