Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在没有反射的情况下将泛型列表转换为泛型数组?类型参数';V';无法实例化directl_Java_Arrays_Generics_Collections - Fatal编程技术网

Java 如何在没有反射的情况下将泛型列表转换为泛型数组?类型参数';V';无法实例化directl

Java 如何在没有反射的情况下将泛型列表转换为泛型数组?类型参数';V';无法实例化directl,java,arrays,generics,collections,Java,Arrays,Generics,Collections,下面是一个简化的代码示例 public V[] values() { List<V> values = pojo.getValues(); return ; // values to array } public V[]值(){ List values=pojo.getValues(); return;//数组中的值 } 请求V[]返回类型的方法的签名,但我得到了一个列表。是否可以在没有反射API的情况下将列表转换为V[] 我无法使用值

下面是一个简化的代码示例

 public V[] values() {
        List<V> values = pojo.getValues();

        return ; // values to array
    }
public V[]值(){
List values=pojo.getValues();
return;//数组中的值
}
请求V[]返回类型的方法的签名,但我得到了一个列表。是否可以在没有反射API的情况下将列表转换为V[]


我无法使用值。toArray(新的V[0])或自己填充数组,因为出现错误-“类型参数“V”无法实例化directl”

您可以使用方法进行无反射操作,因为您需要指定特定类型的数组,只要您无法实例化泛型数组(
新的V[]
):

这意味着您可以直接执行转换,并且不需要这样的方法(假设没有其他值得封装的逻辑):


列表
具有该方法。您也可以迭代列表并自己填充数组。@Just but list.toArray()返回对象[],但签名要求V[]。(V[])值。toArray();提示警告。此解决方案是否会导致错误?请考虑
V
对象的子类。例如,
Integer[]targetArray=sourceList.toArray(新整数[0])有效,适用于包含
整数值的
源列表
。您不需要强制转换。@是的,但我无法编写sourceList。toArray(新的V[0]),类型参数“V”无法直接实例化。然后,正如我在第一条注释中所建议的,您可以迭代列表并自己填充数组。感谢您的回复,但compliler要求强制转换返回值。toArray(array);返回(V[])值。toArray();这个解决方案会导致错误吗?使用第一个,该方法会在内部创建一个传递数组的副本(如果其大小<列表),该副本具有所需的长度,以便将所有元素放入该数组。第一个?对不起,我正在努力,但我真的不明白你的意思。问题是pojo.getValues()返回List(泛化类型),所以我不能使用.toArray(新的V[0]);由于类型参数“V”无法直接实例化检查用法(第二个代码段),您无法实例化像
new V[0]
@Nikolas这样的泛型数组。您是否修改了方法
值的签名?
public V[] values(V[] array) {
    List<V> values = pojo.getValues();
    return values.toArray(array);
}
Integer[] values = values(new Integer[0]);      // usage
Integer[] values = pojo.getValues().toArray(new Integer[0]);