java - 如何创建通用原始数组?

标签 java arrays generics primitive

这是来自 Two methods for creating generic arrays 的后续问题.

通过给定的两种方法,

@SuppressWarnings("unchecked")
static <T> T[] array1(final Class<T> elementType, final int size) {

    return (T[]) Array.newInstance(elementType, size);
}
static <T> T[] array2(final Class<T[]> arrayType, final int size) {

    return arrayType.cast(Array.newInstance(arrayType.getComponentType(), size));
}

这两种方法都适用于对象类型。

final Integer[] objectArray1 = array1(Integer.class, 0);
final Integer[] objectArray2 = array2(Integer[].class, 0);

当涉及到原语时,两个调用都不会编译。

// array1
final int[] primitiveArray1 = array1(int.class, 0);
GenericArray.java:12: error: incompatible types
        final int[] primitiveArray1 = array1(int.class, 0);
                                            ^
  required: int[]
  found:    Integer[]
1 error
// array2
final int[] primitiveArray2 = array2(int[].class, 0);
GenericArray.java:13: error: method array2 in class GenericArray cannot be applied to given types;
        final int[] primitiveArray2 = array2(int[].class, 0);
                                      ^
  required: Class<T[]>,int
  found: Class<int[]>,int
  reason: inferred type does not conform to declared bound(s)
    inferred: int
    bound(s): Object
  where T is a type-variable:
    T extends Object declared in method <T>array2(Class<T[]>,int)
1 error

我该如何处理基本类型?

最佳答案

试试这个

static <A> A array3(final Class<A> arrayType, final int size) 
{    impl omitted... }

final int[] primitiveArray3 = array3(int[].class, 0);

关于java - 如何创建通用原始数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17226379/

相关文章:

php - Laravel 多关系插入

vb.net - 帮助使用 Linq 和泛型。在查询中使用 GetValue

php - Codeigniter session 不起作用

Java 抽象、泛型和构建器

c# - 将方法转换为通用方法?

java - 如何从 Java 中的 .dat 文件中读取一行然后需要将其分开?

java - Hbase 扫描与 Mapreduce 的动态计算

java - 在 Java 中使用 DateTimeFormatter 解析 ZonedDateTime.now()

Java Swing简单动画

c - 分离并比较 C 中字符串内的相同单词