我正在编写一个简单的实用程序泛型类,该类提供带有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编译器抱怨找不到合适的构造函数。
这可以重组以实现我的想法吗? 谢谢。
这是一种可以接受的方法。提供静态助手方法,将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"));
答案 0 :(得分:0)
如何提供直接创建适当类型实例的静态辅助方法?
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
。)