泛型通配符限定 总结
----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
本篇日志着重总结extends和super在泛型限定中的使用方法
1. 泛型通配符限定
1). extends, super和? 的基本使用规则
(1). 定义类型参数的规则
[1]. 自定义类型参数的限制
自定义类型参数的时候,可以使用extends关键字,但是不能使用super关键字或者 ?
[2]. 自定义类型参数的格式
定义的格式:<T>或者<T extends 某种类型>
[2]. 类型参数定义的位置
类型参数可被定义的位置有以下三种:
{1}. 类的class和{之间
e.g. class GenericFuncitonII<T> {…
class GenericFuncitonIIII <T extends Number>{…
{2}. 非静态方法访问修饰符 和 返回值类型 之间
e.g. public <T> void printFunc(…
public <T extends Number> void printFunc(Tobj){…
{3}. 静态方法的static 和 返回值类型 之间
e.g. public static <T> void printFunc(…
(2). 使用类型参数或者? 的规则
当想使用已定义过的参数类型的时候,就用类型参数。
当没有类型参数可用又想使用泛型的时候,就用?来替代类型参数
[1]. 带<>使用类型参数或者?的格式:
【前提:类型参数T在前面被定义过】
{1}. 单独使用类型参数格式:<T>
{2}. 单独使用占位符格式:
<?>, <? extends某种具体类型> 和 <? super某种具体类型>
{3}. 联合使用类型参数和 占位符 的格式:
<? extends T>,<? super T>
【注意】自定义类型变量 如果放在super或者extends前面是无法编译通过的。
MyEclipse验证如下:
[2]. 脱离<>使用类型参数的格式:直接使用T即可
此时就可以把这个T看做一种普通数据类型就可以。普通数据类型能出现在哪,这个T就能出现在哪里。
【注意】?是不可以脱离<>使用的!!!!
因为Java的标示符命名规则是:26字母大小写,下划线_,美元符$ 或者 0-9数组。?并不在合法标示符的组成范围之内,所以不可以单独使用。</