我正在编写一个简单的实用程序泛型类,它提供了一个带有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映射到一个Characters数组,然后调用第一个构造函数。
相反,Java编译器抱怨没有找到合适的构造函数。
这可以重组以实现我的想法吗?谢谢。
这是一种可以接受的方法。提供一个静态帮助器方法将String转换为Character数组。不像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"));
如何提供一个直接创建适当类型实例的静态帮助器方法?
public static final PermGenerator<Character> Create(String str) {
return new PermGenerator(str.chars().mapToObj(c -> (char)c).toArray(Character[]::new));
}
您的用户可以随即致电:
PermGenerator gen = PermGenerator.Create("ABC");
(根据您的偏好以及您在库中遵循的API设计约定,您当然可以使用比Create
更具体的名称,例如CreateFromString
。)