Java布尔addAll方法和泛型类型参数问题
我目前正在学习泛型,我得到了一个任务,在这个任务中,我必须创建一个带有T类型参数和数组数据成员的数组类,以及一些方法(setItem、getItem、visitor、condition和addAll)。我对addAll方法有问题:Java布尔addAll方法和泛型类型参数问题,java,generics,Java,Generics,我目前正在学习泛型,我得到了一个任务,在这个任务中,我必须创建一个带有T类型参数和数组数据成员的数组类,以及一些方法(setItem、getItem、visitor、condition和addAll)。我对addAll方法有问题: public class Array<T> { private T[] array; public Array(T[] array){ this.array = array; } public void setIte
public class Array<T> {
private T[] array;
public Array(T[] array){
this.array = array;
}
public void setItem(int i, T item){
if (i < 0 || i > array.length) {
System.out.println("There is no this value in the array!");
}
array[i] = item;
}
public T getItem(int i){
if (i < 0 || i > array.length) {
System.out.println("There is no this item in the array!");
}
return array[i];
}
public <E> boolean addAll(Collection<? extends E> c){
boolean modified = false;
for (E e : c){
if (c.add(e)){
modified = true;
}
}
return modified;
}
}
我得到消息:二进制运算符%
的操作数类型错误,第一种类型:T,第二种类型:int,其中T是一个类型变量。
我应该如何处理类型参数或布尔条件方法,以便能够检查参数中的项是否可以用2除而不留左,因此它是double/couple
和更大的条件类:
public class greaterCondition<T extends Number> extends Condition<T> {
private T border;
public (T border){
this.border = border;
}
@Override
public boolean condition(T item) {
return item > border;
}
}
公共类greaterCondition扩展条件{
私人边界;
公共(T边界){
this.border=边界;
}
@凌驾
公共布尔条件(T项){
返回项>边框;
}
}
此处NB不处理
运算符
感谢您的任何帮助 您的方法不是类型安全的,原因有两个:
E
和T
之间没有关系;您可以传递一些完全不相关类型的集合的集合中?扩展任何
,因为您不知道集合实际包含的类型(它可能只是某个其他子类的集合)相反,您应该创建一个非泛型方法,该方法接受一个
集合。您不能在Number
上使用数字运算符。对于第一个问题,您应该阅读,这是我还是您的addAll
与这个
没有任何关系,可以是静态的
或者完全在不同的类上?在迭代过程中,您将添加到c
。这必然会产生一个ConcurrentModificationException
。我怀疑addAll
应该将c
的元素添加到数组中,但它本身就是在添加c
来考虑集合感谢SLaks我更改了类型参数,现在我使用了非泛型方法。它正在工作。
public class greaterCondition<T extends Number> extends Condition<T> {
private T border;
public (T border){
this.border = border;
}
@Override
public boolean condition(T item) {
return item > border;
}
}