gpt4 book ai didi

Java:使用工厂实例化 T 类型的数组对象

转载 作者:行者123 更新时间:2023-11-30 06:13:44 26 4
gpt4 key购买 nike

我想像这样实例化一个 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 的类。您可以使用 items = (T[])Array.newInstance(items.getClass().getComponentType(), maxQue) 创建一个这种大小的新数组。

关于Java:使用工厂实例化 T 类型的数组对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31486242/

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