标题:Java,使用泛型,将任意类型的数组拷贝到任意类型的容器Collection中
一、分析
-
不能实现。使用
public <T> void copy(Collection<?> dest,T[] src)
由于此处的dest只能取元素,不能添加,故实现不了将src中的内容添加到dest中 -
可以实现。使用
public static <T> void copy02(Collection<? super T> dest,T[] src)
- 使用了通配符,泛型方法结合
- 使用了T,故需要泛型形参,限定?,使用了泛型方法
- Collection<? super T> des,只能添加
-
可以实现。只使用泛型方法
public static <T> void copy022(Collection<T> dest,T[] src)
二、遍历任意类型的容器Collection
- 使用通配符
public static void printCollection(Collection<?> dest) //使用通配符
- 使用泛型方法
public static <T> void printCollection02(Collection<T> dest) //使用泛型方法
完整代码如下:
/**
* 将数组拷贝到容器里Collection
* @author dell
*
*/
public class TestMyUtils {
/**实现不了
* copy,将src数组中的元素拷贝到-->dest容器中,
* 故dest是添加,而使用?,【只能取元素,不能添加,故实现不了】
* @param <T>
* @param dest
* @param src
*/
// public <T> void copy(Collection<?> dest,T[] src) {//使用了T,故需要泛型形参,<T>使用了泛型方法
//
// }
/**
* 使用了通配符,泛型方法结合
* 使用了T,故需要泛型形参,限定?,<T>使用了泛型方法
* Collection<? super T> des,只能添加
* @param <T>
* @param dest
* @param src
*/
public static <T> void copy02(Collection<? super T> dest,T[] src) {//使用了T,故需要泛型形参,限定?,<T>使用了泛型方法
for(T t:src) {
dest.add(t);
}
}
//-->只使用泛型方法
public static <T> void copy022(Collection<T> dest,T[] src) {
for(T t:src) {
dest.add(t);
}
}
/**
* 遍历容器Collection
* @param args
*/
public static void printCollection(Collection<?> dest) {//使用通配符
for(Object obj:dest) {
System.out.println(obj);
}
}
public static <T> void printCollection02(Collection<T> dest) {//使用泛型方法
for(T t:dest) {
System.out.println(t);
}
}
/**
* main
* @param args
*/
public static void main(String[] args) {
String[] src=new String[] {"aaa","bbb","ccc"};
List<String> dest=new ArrayList<>();
//测试String-->String
TestMyUtils.copy02(dest, src);
//输出容器Collection
// TestMyUtils.printCollection(dest);
TestMyUtils.printCollection02(dest);
System.out.println("------------测试二");
Integer[] src02=new Integer[] {1,2,3};
List<Number> dest02=new ArrayList<>();
//测试Integer-->Number
TestMyUtils.copy02(dest02, src02);
TestMyUtils.printCollection02(dest02);
}
}