我想实例化一个 T 类型的数组:
items = new T[maxQue];
这是到目前为止我的代码,我相信一种非反射方法:
interface MyFactory<T>
{
T[] newObject();
}
public class Queue< T extends Comparable<T> > {
private int front;
private int rear;
private T[] items;
private int maxQue;
private static final int MAX_ITEMS = 1000;
public Queue(MyFactory<T> factory) {
maxQue = MAX_ITEMS + 1;
front = maxQue - 1;
rear = maxQue - 1;
items = factory.newObject();
items = new T[maxQue];
}
}
{ items = factory.newObject();有效并解决了编译器错误,但我不知道如何使用 MyFactory 接口(interface)将数组的大小设置为 maxQue。
- 如何声明这个大小为 maxQue 的数组?
顺便说一句,虽然我知道 Java 中反射的定义,但有人可以用外行术语来表达它和/或工厂的概念吗?
编辑:在这里找到了一个不错的反射描述: What is reflection and why is it useful?
我仍然不太清楚何时应该避免反射以及它是否适合创建数组。
最佳答案
如果 T
是类型参数,则永远不能在 Java 中使用 new T
,因为它们选择实现泛型的方式。但是,有一些方法可以使用反射来解决这个问题。
由于您已经有一个 T[]
类型的对象,因此您可以使用反射来获取其类型,然后创建该类型的新数组。
items.getClass().getComponentType()
将为您提供 T 的 Class。您可以使用 items = (T[])Array.newInstance(items.getClass().getComponentType(), maxQue)
创建一个此大小的新数组。
关于Java:使用工厂实例化 T 类型的数组对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31486242/