- 1、本文档共14页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
08_泛型概论
泛型
(时间:1次课,1学时)
第8章 泛型
8.1 泛型概述
8.2 泛型类和接口的定义及使用
8.3 有界类型参数
8.4 泛型方法
8.5 类型参数的通配符
8.6 擦除
8.7 泛型的局限
8.1 泛型概述
问题:编写一个简易的对象容器类,它可以存放任意数量对象?请注意潜在问题
class MyList{
public void add(Object obj){ …}
public Object get(int index){ …}
public int size(){ …}
}
public class MyListTest{
public static void main(String[] args){
MyList list = new MyList();
list.add(123abc);
list.add(new Date());
list.add(new Random());
}
}
使用泛型改写容器类
只能往这个容器中放置定义时指定类型的对象了,取出容器中的对象时也无须进行强制类型转换了。这样就使得这个容器类具有了更高的通用性。
class MyGenericListE{
public void add(E ele){ …}
public E get(int index){ …}
public int size(){ …}
}
public class MyGenericListTest{
public static void main(String[] args){
MyGenericListString list = new MyGenericListString();
list.add(123abc);
list.add(new Date()); //编译报错
list.add(new Random()); //编译报错
}
}
8.1.1 泛型定义
泛型:就是在定义类、接口、方法、方法参数或成员变量时,指定它的操作对象的数据类型为一个参数。
在具体使用类、接口、方法、方法参数或成员变量时,将这个参数用具体的某一数据类型来代替。
泛型的好处:它在编译时进行类型安全检查,并且在运行时所有的转换都是强制的、隐式的。提高了代码的重用率。
8.2.1 泛型类和接口的定义
定义语法
class 类名类型参数的名称 { …}
interface 接口名类型参数的名称 { …}
说明:类型参数的名称建议使用单个大写字母。如常用的名有:
E:表示集合中的元素类型。
K:表示“键值对”中的键的类型。
V:表示“键值对”中的值的类型。
T:表示其它所有的类型。
8.2.2 从泛型类派生子类
当某个类的父类是泛型类时:这个子类要把类型参数传递给父类;也可以把子类定义成特定于指定类型的,这个子类就不再是泛型类了。
class SuperClassT{
private T o;
public SuperClass(T o){ this.o = o; }
public String toString(){ return T: + o; }
}
/** 泛型类的继承 */
class SubClass T extends SuperClassT{
public SubClass(T o){ super(o); }
}
class SpecialSubClass extends SuperClassString{
public SpecialSubClass(String o){ super(o); }
}
8.2.3 实现泛型接口
具体子类要把类型参数传递给所实现的接口;也可以把具体子类定义成特定于指定类型的。
interface MyGenericTypeInterfaceT{ }
class MyImplementT implements MyGenericTypeInterfaceT{}
class IntegerImplement implements MyGenericTypeInterfaceInteger{ }
8.3 有界类型参数
有界类型参数可以为泛型的类型参数指定一个上界
class StatisticsT extends Number {
private T[] arrs;
public Statistics(T[] arrs) {
this.
文档评论(0)