刚刚用到泛型中的?,一时想不起来通配符和 T,E 是什么区别,T,E 又是什么区别,查了下百度,度娘还是一如既往的不怎么给力,
自己摸索出了个自己能信服的。
1.在没有出现泛型的的时候
List list = new ArrayList();
list 可以存任何 Object 对象,为了约束,避免强制转换带来的问题,后来有了泛型,T,E 是一个意思,只是一个别名,可以叫 A,B 都可以,没区别
List<String> list2 = new ArrayList<>();
LIst<T extends User> list3 = new ArrayList<>();
list2 表示这个容器只能存 String 的对象,
list3 只能存 User 以及 User 的子类
2:通配符?号,这个在使用上有限制
相同
public void test(List<?> list); 这个可以接收 list1,list2,list3 当做参数值,和使用其他 T,E 一样
不同
List<?> list5 = new ArrayList<>();
list5不能add任何对象,还有在任何使用?通配符的泛型方法中,我不能返回这个不确定类型
public <T> test1(T t) {
return t;
}
正确
public <?> test1(? ?) {
return ?;
}
这就是一个错误,没有此语法,只是做个例子
我们当做一个方法的形参,来获取值
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于