我尝试用随机值填充ArrayLists。 Arraylist可以包含Strings,Integers,Doubles或Chars。创建随机值效果很好,但是我的问题是我无法编写我的insertRandom方法。它应该插入特定的数据类型(例如double,int等)。我在下面描述了我希望我的insertRandom方法要做的事情。 我收到警告“类型缓冲区中的insert(T)方法不适用于arguments(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);
}
}
感谢和问候, 帕特里克
答案 0 :(得分:1)
即使您使用泛型并且 T 是Double,也无法向其中添加 String 。这意味着没有必要检查类的类型。
Buffer<Double> bd = new Buffer(10);
bd.insert(22.9);
bd.insert("string"); // compiler error
我认为这里不需要泛型。您只需要一个Buffer<Object>
,因为根据您的要求,您需要添加字符串,整数,双精度数或字符。因此,您甚至不需要进行类型检查。
类似的东西:
Buffer<Object> buff = new Buffer<Object>(10);
buff.insert(22.9);
buff.insert("");
buff.insert(13);
答案 1 :(得分:1)
作为一种选择,您可以向构造函数提供Class
对象,并使用insertRandom()
方法检查此类,例如:
public class Buffer <T> {
private final Class<T> type;
private ArrayList<T> list;
// constructor
public Buffer (int capacity, Class<T> type) {
this.list = new ArrayList<T>();
this.type = type;
}
// 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 (type == String.class) {
insert((T)"ThisString");
}
if (type == Double.class) {
insert((T)Double.valueOf(3.4));
}
}
}
答案 2 :(得分:0)
首先要注意的是,function Obscure(sub_key, sub_value, sentence) {
var obscuredSentence = sentence.replace(sub_key, sub_value);
for (var count = 1; count < 2; count++) {
return Obscure(sub_key, sub_value, sentence);
}
var obscuredSentence = sub_value + " " + obscuredSentence + " " + sub_value;
return obscuredSentence;
}
console.log(Obscure("the", "the goat", "I want the money"));
//"RangeError: Maximum call stack size exceeded (line 2 in function Obscure)"
不能使用像int
这样的基元。相反,您必须使用相应的类。在这种情况下,ArrayList
。
第二点:我认为您可以通过执行Integer
来检查ArrayList包含的类型。