6、将任意类型的对象填充到任意类型的数组中,与是fillArray(newInteger[]{2,3,4},"ddd");这样调用是正确的,这样做忽略类型限制
public static <T> void fillArray(T[] a,T b) //将任意一个对象填充到任意类型的数组 { for(int i =0;i<a.length;i++) { a[i] =b ; } } |
7、以自定义范型的形式显示一个集合的数据,下面一个是利用自定义范型一个是利用通配符来实现,但是不同的是利用通配符操作的集合不能向集合中插入元素
但是自定义范型却可以。原因是通配符代表的集合我们不知道集合内部具体元素是什么类型所以不能对集合进行add操作。
public static <T> void showCollection(Collection<T> col,T obj) //利用范型来输出任意类型集合 public static void showCollection(Collection<?> col) //利用范型来输出任意类型集合 |
8、如果一个类中多个方法都需要范型那么就是用类级别的范型。例如
class A<E> { public void add(E obj){} public E get(){} private E data; } |
这样声明范型和在函数前面声明其实是一样的只不过是在类的级别上作用于整个类而已
9、要注意范型只是给编译器看的。
也就是说Vector<Integer>Vector<String>他们用到的都是同一份字节码,字节码只有class文件加载到内存中的时候才有
所以在一个类中下面2个方法不能同时存在
void show(Vector<Integer>) {} void show(Vector<String>){} |
这两个方法都不是重载因为编译后要去掉类型信息。