1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| class ArrayList<T>{ public void add(T e){ ... } <T>public void add1(T e){ ... } <E>public void add2(E e){ ... } }
ArrayList<T>中一旦T被指定为String后那么add没有前缀<T> 的话,该方法中只能是add (String 对象)
而你要是有前缀<T>或<E>的话,那么你就是告诉编译器对它说:这是我新指定的一个类型, 跟ClassName<T>类对象中的T没有半毛钱的关系。也就是说这个add1中的T和add2中的E是一个效果,也就是你可以把add2理解为<T> void add2(T e){~~~~~}
从上面我说的看,那就是 这个方法返回值前也加个<T>的话,这个T就代表该方法自己独有的某个类,而不去和类中限定的T产生冲突,你直接换成<E>会更容易理解的。
那么<T> ArrayList<T>相当于ArrayList中带有<T>的方法使用新指定的一个类型T
|