gpt4 book ai didi

Java:我的 classOf 和 newArray 怎么样?

转载 作者:太空宇宙 更新时间:2023-11-04 08:47:38 25 4
gpt4 key购买 nike

Here ,我想知道如何实现Collection#toArray(T[] array)适本地。我最生气的是array.getClass().getComponentType()类型为Class<?>而不是Class<? extends T>正如我所预料的。

因此,我编写了这三个函数:

@SuppressWarnings("unchecked") static <T> Class<? extends T> classOf(T obj) {
return (Class<? extends T>) obj.getClass();
}

@SuppressWarnings("unchecked") static <T> Class<? extends T> classOf(T[] array) {
return (Class<? extends T>) array.getClass().getComponentType();
}

@SuppressWarnings("unchecked") static <T> T[] newArray(Class<T> clazz, int size) {
return (T[]) Array.newInstance(clazz, size);
}

然后,我的toArray实现如下:

    public <T> T[] toArray(T[] array) { 
int size = size();
if (array.length < size) {
array = newArray(classOf(array), size);
} else if (array.length > size) {
array[size] = null;
}

int i = 0;
for (E e : this) {
array[i] = classOf(array).cast(e);
i++;
}
return array;
}

我现在想知道的是:

这 3 个辅助函数总是安全的吗?特别是, Actor 阵容总是安全吗?

为什么 Java 中还没有这些函数?

另请参阅此非常相关的问题: T obj for a generic type T . The type of obj.getClass() is Class<?> and not Class<? extends T> . Why?

最佳答案

您的代码看起来相当不错,但您可能会考虑使用 java.util.Arrays.copyOf 来简化您的生活。

关于Java:我的 classOf 和 newArray 怎么样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4011289/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com