【发布时间】:2019-03-23 18:40:51
【问题描述】:
我尝试用随机值填充 ArrayList。 Arraylist 可以包含字符串、整数、双精度或字符。创建随机值工作正常,但我的问题是我无法编写我的 insertRandom 方法。它应该插入特定的数据类型(如 double、int 等)。我在下面描述了我希望我的 insertRandom 方法执行的操作。 我收到警告“类型缓冲区中的方法 insert(T) 不适用于参数 (int)。 我用谷歌搜索了它,但没有发现/不明白如何将我的值类型转换为 T 对象,或者如何检查(类似于“instanceof”所做的),我的 ArrayLists 包含哪些数据类型。我已经阅读了人们在构造函数中用作参数的类类型,但我不能更改构造函数的参数列表。
public class Buffer <T> {
private ArrayList<T> list;
// constructor
public Buffer (int capacity) {
this.list = new ArrayList<T>();
}
// insert items to buffer
public void insert (T item) {
list.add(item);
}
// insert random values
public void insertRandom () {
check if ArrayList is of type String / Integer / Double
if (ArrayList is-of-type-String) {
insert("ThisString");
}
if (ArrayList is-of-type-Double) {
insert(3.4);
}
}
感谢和最好的问候, 帕特里克
【问题讨论】:
-
在不确切知道您的分配描述的情况下,如果真正的意图是将 any 对象存储在同一个列表中,这听起来像是对泛型的糟糕分配。那基本上就是
ArrayList<Object>,泛型对于这种情况并没有真正的用处。 -
不可能在 Buffer
的方法中获取 T 的运行时类型,除非您将 Class 实例传递给构造函数并将其存储在字段中。你确定这是作业要求的吗?