标题:java中,类型通配符和泛型方法的比较
一、分析
- 使用泛型方法
public static <T> void copy(Collection<T> from,Collection<T> to)
只能T–>T,不能String–>Object,【不推荐】
*【推荐】 使用通配符和泛型方法结合public static <T> void copy02(Collection<? extends T> from,Collection<T> to)
* 可以String–>Object 【T的子类–>T】
* Collection<? extends T> from【只能取,】enough,
- 【次之】使用泛型方法
public static <T,E extends T> void copy03(Collection<E> from,Collection<T> to)
- 可以String–>Object 【T的子类–>T】
- Collection from【可以取,放】,但是此处没有必要
public class TestMyUtils02 {
/**不推荐
* 只能T-->T,不能String-->Object
* @param <T>
* @param from
* @param to
*/
public static <T> void copy(Collection<T> from,Collection<T> to) {//只能object-->object,不能String-->Object
for(T t:from) {
to.add(t);
}
}
/**
* 可以String-->Object 【T的子类-->T】
* Collection<? extends T> from【只能取,】enough,
* @param <T>
* @param from
* @param to
*/
public static <T> void copy02(Collection<? extends T> from,Collection<T> to) {
for(T t:from) {
to.add(t);
}
}
/**
* 可以String-->Object 【T的子类-->T】
* Collection<E> from【可以取,放】,但是此处没有必要
* @param <T>
* @param from
* @param to
*/
public static <T,E extends T> void copy03(Collection<E> from,Collection<T> to) {
for(T t:from) {
to.add(t);
}
}
/**
* main
* @param args
*/
public static void main(String[] args) {
List<String> from=new ArrayList<>();
from.add("aa");
from.add("bb");
from.add("cc");
System.out.println("--------------测试一 String-->String");
List<String> to=new ArrayList<>();
TestMyUtils02.copy(from, to);
TestMyUtils.printCollection02(to);//输出容器Collection中的内容,参见上一篇blog:https://blog.csdn.net/weixin_45986454/article/details/106669843
// System.out.println("--------------测试二 String-->Object");
// List<Object> to2=new ArrayList<>();
// TestMyUtils02.copy(from, to2);//编译不通过,
System.out.println("--------------测试三 String-->Object");
List<Object> to3=new ArrayList<>();
TestMyUtils02.copy03(from, to3);
TestMyUtils.printCollection02(to3);//输出容器Collection中的内容,参见上一篇blog:https://blog.csdn.net/weixin_45986454/article/details/106669843
}
}