gpt4 book ai didi

java - 从对象转换为枚举

转载 作者:行者123 更新时间:2023-11-29 05:20:15 25 4
gpt4 key购买 nike

所以我尝试在 Java 中实现一个 CircularBuffer,我可以访问它的底层 array:

/* package protected */ class CircularBuffer<E> {
private final Object[] mArray;
private int mSize;
private int headPointer = 0;

private CircularBuffer(int size) {
mSize = size;
mArray = new Object[mSize];
}

private void add(E elem) {
mArray[headPointer] = elem;
headPointer = (headPointer + 1) % mSize;
}

public E[] getArray() {
return (E[]) this.mArray;
}

我想将它与 Enums 和各种基元(特别是 boolean)一起使用,但是我调用的所有内容 myEnum[] = myCircularBuffer.getArray(),我得到一个:

java.lang.ClassCastException: java.lang.Object[] cannot be cast to com.package.myEnum[]

关于制作这样的东西有什么技巧吗?

编辑:我知道 Apache CircularFifoQueue,但我不想使用它,因为它超出了我的需要,而且我担心包的大小。

最佳答案

您必须使内部 mArray 成为通用类型 E 的数组,而不是 Object 的数组。为此,您必须更改构造函数以同时获取通用 E 类型的 Class。并且还声明您的 mArray 为 E[] 类型,这将帮助您避免进一步不必要的转换(例如,您的 getArray() 方法可以简单地返回 mArray 没有转换)。

你可以这样做:

private final E[] mArray;

private CircularBuffer(int size, Class<E> type) {
mSize = size;
mArray = (E[]) Array.newInstance(type, size);
}

你可以这样使用它:

CircularBuffer<String> buff = new CircularBuffer<>(10, String.class);
String[] arr = buff.getArray();

关于java - 从对象转换为枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25112495/

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