泛型
来源:互联网 发布:pupa丰胸霜怎么样 知乎 编辑:程序博客网 时间:2024/05/22 14:19
类(接口)中的泛型:
class A<T,V extends Number>
方法中的泛型
public <T, V extendsNumber> Map<T,V>) test(T t, List<? extends T> list, Vv)
泛型通配符?
类中的泛型可以在定义对象时传入从而确定,方法中的泛型应该通过传入的实参来让系统能够推断出来,通配符不应该出现在上面的红色部分中。
方法泛型的使用场景:
方法泛型能够反映出形参类型之间的依赖关系或者形参类型和返回值类型之间的依赖关系,这是使用方法泛型的唯一场景。
通配符?
首先通配符表示的是未知类型,而不是全部,例如List<? extends Number>表示的是不知道是哪一个类型,仅仅知道是Number的子类或者Number,而不是表示所有Number的子类。例如有一个List<? extends Object> 的list,那么实际是仅仅能够向这个list中add的是null,而不能add任何其他对象的实例,因为不知道到底是哪一个。通配符只能出现在List<? extends Number> 这种格式中,而不能单独出现,例如<? extends Number>。能使用通配符的地方不要使用方法泛型。
声明泛型:
最上面的红色部分可以理解为是声明泛型,不能使用通配符,声明部分声明了的就可以在其他地方使用了。
个人感觉局部变量使用泛型的意义不大。
上限: extends < T extends Number> T是Number本身或者子类
下限: super < T superInteger> T是Integer本身或者超类
int binarySearch(List<?extends Comparable<? super T>> list, T key)
List中的泛型类型为A,那么定义A的时候实现了Comparable<B>,其中B是T的父类,例如T为String,由一个类实现了Comparable<Object>,那么这个类就符合要求。
关于通配符看几个例子个人感觉 ?和? extends Object是一样的
public Object test(ArrayList<?> list){//没有问题return list.get(0);}public void test(ArrayList<?> list){//下面会发生错误list.add(new Object());//此时能add的只有nulllist.add(null);}
- 泛型
- 泛型
- 泛型
- 泛型
- 泛型
- 泛型
- 泛型
- 泛型
- 泛型
- 泛型
- 泛型
- 泛型
- 泛型
- 泛型
- 泛型
- 泛型
- 泛型
- 泛型
- const char*, char const*, char*const的区别
- Dijkstra(迪杰斯特拉算法)的Java完整版实现
- 重置oracle 11G的system、sys密码
- 一个类似Listview的效果
- GPRS模块发短信
- 泛型
- “秘密”的火爆注定将只是昙花一现?
- 如何制定与选择Oracle容灾方案
- db2日期和时间常用汇总
- NSTimer和NSRunLoop在子线程中的使用
- Eclipse Java注释模板设置详解
- 后缀自动机实现的例子
- 漫谈:机器学习中距离和相似性度量方法
- 菊花