一、泛型概述
jdk1.5版本以后出现的新特性,用于解决安全问题,是一个安全机制。
好处:
1,将运行时期的问题ClassCastException转到了编译时期。
2,避免了强制转换的麻烦。
什么时候用:
当操作的引用数据类型不确定的时候。就使用泛型(<>)。将要操作的引用数据类型传入即可,其实<>就是一个用于接收具体引用数据类型的参数范围。
在程序中,只要用到了带有<>的类或者接口,就要明确传入的具体引用数据类型。
泛型技术是给编译器使用的技术,用于编译时期。确保了类型的安全。
运行时,会将泛型去掉,生成的class文件中是不带泛型的,这个称为泛型的擦除。
泛型的通配符:未知类型。
二、泛型的使用
import
java.util.*;
publicclass
GenericDefineDemo4
{
publicstaticvoid main(String[]
args)
{
ArrayList<String> arr=new
ArrayList<String>();
arr.add("java01");
arr.add("java02");
arr.add("java03");
arr.add("java04");
Iterator<String>
it=arr.iterator();
while(it.hasNext())
{
System.out.println(it.next());
}
}
}
三、泛型类
1、格式
class
ClassName<datatype>
{
}
2、优点
便于对任何未知的的数据类型进行操作,特别适合用作工具类,避免了强制类型转换的麻烦。
3.示例
import
java.util.*;
publicclass
GenericClass
{
publicstaticvoid main(String[]
args)
{
Tools<String> tools=new
Tools<String>("hello");
System.out.println(tools.getObj());
}
}
class
Tools<T>
{
private T obj;
public Tools(T
t)
{
this.obj=t;
}
public T getObj()
{
returnobj;
}
publicvoid setObj(T obj)
{
this.obj =
obj;
}
}
四、泛型方法
当只需要某一个方法可以接收不同类型的参数,而不是整个类的时候,就可以用到泛型方法,它将大大提高程序代码的扩展性。
示例代码如下:
import
java.util.*;
publicclass
GenericMethod
{
publicstaticvoid main(String[]
args)
{
String s="hello!Nice to meet you!";
Integer
inter=3;
Show show=new
Show();
show.print(s);
show.print(inter);
}
}
class
Show
{
public <Q> void print(Q
q)
{
System.out.println(q);
}
}
五、静态泛型方法
1、格式
public
static <T> methodName(T
param)
{
}
2、特点
由于静态方法不可以访问类中的泛型,如果静态方法操作的类型不确定,这可以把泛型定义在静态方法上。
3、示例
publicstatic
<Q> void print(Q
q)
{
System.out.println(q);
}
六、泛型接口
1、格式
interface
Inter<T>
{
void show(T
t);
}
2、特点
当接口要操作的数据类型不确定的时候,就可以使用泛型接口。
注意:
www.yzyedu.com
当实现接口的类已经确定了接口具体的类型时,创建对象时就不用再指明类型了,如:
class InterImpl
implements
Inter<String>
{
}
如果实现类仍不知道具体的类型,就要创建对象时指明,如:
class
InterImpl<T> implements
Inter<T>
{
}
InterImpl<String> im=new
InterImpl<String>();
3、示例
import
java.util.*;
public class Test
{
public static void
main(String[] args)
{
InterImpl<String> im=new
InterImpl<String>();
im.print("hello");
}
}
interface
Inter<T>
{
void print(T t);
}
class
InterImpl<T> implements Inter<T>
{
public void
print(T
s)
{
System.out.println(s);
}
}
七、泛型extends限定
extends
E:接收E类型或者E的子类型对象。上限一般存储对象的时候用。比如添加元素 addAll.
八、泛型super限定 www.jx-jf.com
super E:接收E类型或者E的父类型对象。下限。一般取出对象的时候用。比如比较器。
相关文章
- 09-01ts 之 多种泛型的处理方式
- 09-01StructureMap.dll 中的 GetInstance 重载 + 如何利用 反射动态创建泛型类
- 09-01Java-高负载应用程序的数据库可伸缩性?
- 09-01我国服务型机器人产业呈现井喷式增长 基于底层应用的开发需求越发强劲
- 09-01将泛型列表List
转换为指定属性的XML - 09-01Win32应用程序的基本结构
- 09-01委托、Action泛型委托、Func泛型委托、Predicate泛型委托的用法
- 09-01诺丁汉郡议会与Rimini Street续签任务关键型SAP应用程序的支持服务协议
- 09-01angular7中模板驱动型表单的基本使用
- 09-01链表的好处、泛型、Set接口