如何构造Java泛型类以接受非泛型构造函数参数

问题描述 投票:1回答:1

我正在编写一个简单的实用程序泛型类,它提供了一个带有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"));
generics types constructor inference
1个回答
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。)

© www.soinside.com 2019 - 2024. All rights reserved.