Java布尔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

我目前正在学习泛型,我得到了一个任务,在这个任务中,我必须创建一个带有T类型参数和数组数据成员的数组类,以及一些方法(setItem、getItem、visitor、condition和addAll)。我对addAll方法有问题:

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;
        }
    }