如何创建一个可以实例化多个对象并将它们放入列表的通用方法

How to create a Generic method that can instantiate multiple objects and put them into a List

我正在尝试创建一个小函数,它将获取可变数量的对象、实例化它们并将它们添加到列表中。

我个人想将此用于 StringBigDecimalLong

我觉得我很接近以下功能:

<T> List<T> createGenericList(Class<T> clazz, T ...params) throws Exception {
    List<T> list = new ArrayList<T>();
    for (T param : params) {
        Constructor<T> ctor = clazz.getConstructor(clazz);
        T instance = constructor.newInstance(param);
        list.add(instance);
    }
    return list;
}

这非常适合 String:

createGenericList(String.class,"a","b")

但不适用于 BigDecimalLong

createGenericList(BigDecimal.class,10,10);

因为 Java 将我的数字读作 int。转换似乎也不起作用。

no instance(s) of type variable(s) exist so that Integer conforms to BigDecimal 
inference variable T has incompatible bounds:
equality constraints: BigDecimal
lower bounds: Integer

我也在看 ImmutableList.of(...) 但我似乎对数字有同样的问题。

提供一个Function<P, T>方法:

<P, T> List<T> createGenericList(Function<? super P, ? extends T> func, List<? extends P> params) throws Exception {
    List<T> list = new ArrayList<T>();
    for (P param : params) {
        T instance = func.apply(param);
        list.add(instance);
    }
    return list;
}

然后像这样调用:

List<ParamType> params = Arrays.asList(param1, param2);
List<SomeType> list = createGenericList(SomeType::new, params);

(假设 SomeType 有一个构造函数采用单个 ParamType;但如果没有,这将在编译时失败)