我有一个类映射器,它应该将实现 Function 接口的任何对象应用于类型 D 的数组,并返回类型为 R 的数组。
问题是 Java 不允许我使用“new R[]”,到目前为止,我一直在努力寻找一种从头开始创建 R 数组的方法。我目前正在尝试使用 Array.newInstance 方法,但找不到将 R 的类类型存储在 Class 变量中的方法。
public class Mapper {
/**
* applies passed function to each object of type D in array
* @param function
* @param array
* @return array of type r and length array.length
*/
public static <R, D> R[] map(Function<R, D> function, D[] array) {
ArrayList<R> list = new ArrayList<R>();
//apply function to each variable
//add rs into object array
for( int i = 0; i < array.length; i++ ) {
R r = function.apply( array[i] );
list.add( r );
}
Class<R> clazz = list.get(0).getClass();
return (R[])Array.newInstance(clazz, list.size());
}
}
我可以在运行时为泛型类型 R 正确获取类值,或者以其他方式将 ArrayList 中的对象作为 R[] 返回?
喵喔喔
Smart猫小萌
相关分类