【发布时间】:2015-07-23 22:44:16
【问题描述】:
我有一个输入数组 [3, 5, 12, 8],我想要一个与输入相同的输出数组(输入不得受影响),但元素 7 插入在 5 到 12 之间,所以在索引处输入数组的 2 个。
这是我目前所拥有的。我注释掉了无法通过事件编译的代码,并添加了在尝试这种或那种方式时出现的几个问题:
public static <O>ArrayList<O> addToSet(O[] in,O add,int newIndex){
// O obj = (O) new Object(); //this doesnt work
// ParameterizedType obj = (ParameterizedType) getClass().getGenericSuperClass(); // this is not even recognized
ArrayList<O> out = multipleOfSameSet(obj, in.length);
if (newIndex > in.length){
out = new ArrayList<>(newIndex+1); // also noticed that initializing an ArrayList
//like this throws an IndexOutOfBoundsException when i try to run out.get(),
// could someone explain why??
out.set(newIndex, add);
}
int j = 0;
int i = 0;
while(j<in.length+1){
if (j==newIndex){
out.set(j, add);
} else if(i<in.length){
out.set(j, in[i]);
i++;
}
j++;
}
return out;
}
数组组件类型可以是String、Integer甚至是JPanel。
【问题讨论】:
-
@SLaks 不能做什么?在我的方法中初始化 obj?
-
那应该怎么做?
-
@Raffaele 它应该创建一个输入对象的数组并指定特定索引的内容。
-
add.getClass().newInstance()如果你有一个空的构造函数应该可以工作。 -
out.set(newIndex, add)不起作用,因为new ArrayList<>(newIndex + 1)为ArrayList分配了newIndex + 1元素的空间,但它是空的;您不能在中间随机设置索引。您必须首先用newIndex元素实际填充ArrayList;你不能set一个元素的索引大于当前大小。
标签: java android generics methods