Java_泛型的基本应用
来源:互联网 发布:涵曦瘦身霜有害知乎 编辑:程序博客网 时间:2024/06/06 09:52
泛型是为了统一存入数据的类型额特别设计的新特性
好处:将运行时期的问题ClassCastException转到了编译时期。
避免了强制转换的麻烦。
运行时,回去掉泛型,生产的class文件中是不带泛型的,称为泛型的擦除
-----------------------------------------------------------------------------------------------------
泛型可用在类,方法,静态方法,接口上
-----------------------------------------------------------------------------------------------------
泛型的基本使用
import java.util.*;
publicclass GenericDefineDemo4{
publicstaticvoid main(String[] args){
ArrayList<String> arr=new ArrayList<String>();//定义一个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());
}
}
}
-----------------------------------------------------------------------------------------------------
泛型类:格式:class ClassName<datatype>
{
}
优点:便于对任何未知的的数据类型进行操作,
特别适合用作工具类,避免了强制类型转换的麻烦。
泛型类示例:import java.util.*;
publicclass GenericClass{
publicstaticvoid main(String[] args){
Tools<String> tools=new Tools<String>("hello");//创建一个类,制定存入的数据类型为String
System.out.println(tools.getObj());
}
}
class Tools<T>{//定义一个泛型类,不指定存入的具体类型,用 T 代替
private T obj;
public Tools(T t){ //构造方法
this.obj=t;
}
public T getObj() {//定义get方法,返回值为T
return obj;
}
publicvoid setObj(T obj) {
this.obj = obj;
}
}
-----------------------------------------------------------------------------------------------------
泛型方法:当只需要某一个方法可以接收不同类型的参数,
而不是整个类的时候,就可以用到泛型方法,
它将大大提高程序代码的扩展性。
泛型方法示例:import java.util.*;
publicclass GenericMethod{
publicstaticvoid main(String[] args){
String s="hello!Nice to meet you!";//定义String类型参数
Integer inter=3;//定义Integer类型参数
Show show=new Show();//创建一个带泛型方法的类
show.print(s);//调用类中的泛型方法,输出String类型的数据
show.print(inter);//调用类中的泛型方法,输出Interge类型的额数据
}
}
class Show{
public <Q> void print(Q q){//将放行定义在方法上,不指定具体类型
System.out.println(q);
}
}
-----------------------------------------------------------------------------------------------------
静态泛型方法:格式:public static <T> methodName(T param)
{
}
特点:由于静态方法不可以访问类中的泛型,
如果静态方法操作的类型不确定,这可以把泛型定义在静态方法上。
示例:public static <Q> void print(Q q)//类似于泛型方法
{
System.out.println(q);
}
泛型接口:当接口要操作的数据类型不确定的时候,就可以使用泛型接口。
注意:当实现接口的类已经确定了接口具体的类型时,创建对象时就不用再指明类型了,
如:class InterImpl implements Inter<String>{//Inter已经明确了泛型类型
}
如果实现类仍不知道具体的类型,就要创建对象时指明,
如:class InterImpl<T> implements Inter<T>{//Inter没有明确泛型
}
InterImpl<String> im=new InterImpl<String>();
泛型接口实例: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>{//实现未ing去泛型类型的接口
public void print(T s){
System.out.println(s);
}
}
-----------------------------------------------------------------------------------------------------
泛型限定:extends E:接收E类型或者E的子类型对象。上限
一般存储对象的时候用。比如添加元素 addAll.
super E:接收E类型或者E的父类型对象。下限。
一般取出对象的时候用。比如比较器。
好处:将运行时期的问题ClassCastException转到了编译时期。
避免了强制转换的麻烦。
运行时,回去掉泛型,生产的class文件中是不带泛型的,称为泛型的擦除
-----------------------------------------------------------------------------------------------------
泛型可用在类,方法,静态方法,接口上
-----------------------------------------------------------------------------------------------------
泛型的基本使用
import java.util.*;
publicclass GenericDefineDemo4{
publicstaticvoid main(String[] args){
ArrayList<String> arr=new ArrayList<String>();//定义一个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());
}
}
}
-----------------------------------------------------------------------------------------------------
泛型类:格式:class ClassName<datatype>
{
}
优点:便于对任何未知的的数据类型进行操作,
特别适合用作工具类,避免了强制类型转换的麻烦。
泛型类示例:import java.util.*;
publicclass GenericClass{
publicstaticvoid main(String[] args){
Tools<String> tools=new Tools<String>("hello");//创建一个类,制定存入的数据类型为String
System.out.println(tools.getObj());
}
}
class Tools<T>{//定义一个泛型类,不指定存入的具体类型,用 T 代替
private T obj;
public Tools(T t){ //构造方法
this.obj=t;
}
public T getObj() {//定义get方法,返回值为T
return obj;
}
publicvoid setObj(T obj) {
this.obj = obj;
}
}
-----------------------------------------------------------------------------------------------------
泛型方法:当只需要某一个方法可以接收不同类型的参数,
而不是整个类的时候,就可以用到泛型方法,
它将大大提高程序代码的扩展性。
泛型方法示例:import java.util.*;
publicclass GenericMethod{
publicstaticvoid main(String[] args){
String s="hello!Nice to meet you!";//定义String类型参数
Integer inter=3;//定义Integer类型参数
Show show=new Show();//创建一个带泛型方法的类
show.print(s);//调用类中的泛型方法,输出String类型的数据
show.print(inter);//调用类中的泛型方法,输出Interge类型的额数据
}
}
class Show{
public <Q> void print(Q q){//将放行定义在方法上,不指定具体类型
System.out.println(q);
}
}
-----------------------------------------------------------------------------------------------------
静态泛型方法:格式:public static <T> methodName(T param)
{
}
特点:由于静态方法不可以访问类中的泛型,
如果静态方法操作的类型不确定,这可以把泛型定义在静态方法上。
示例:public static <Q> void print(Q q)//类似于泛型方法
{
System.out.println(q);
}
泛型接口:当接口要操作的数据类型不确定的时候,就可以使用泛型接口。
注意:当实现接口的类已经确定了接口具体的类型时,创建对象时就不用再指明类型了,
如:class InterImpl implements Inter<String>{//Inter已经明确了泛型类型
}
如果实现类仍不知道具体的类型,就要创建对象时指明,
如:class InterImpl<T> implements Inter<T>{//Inter没有明确泛型
}
InterImpl<String> im=new InterImpl<String>();
泛型接口实例: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>{//实现未ing去泛型类型的接口
public void print(T s){
System.out.println(s);
}
}
-----------------------------------------------------------------------------------------------------
泛型限定:extends E:接收E类型或者E的子类型对象。上限
一般存储对象的时候用。比如添加元素 addAll.
super E:接收E类型或者E的父类型对象。下限。
一般取出对象的时候用。比如比较器。
0 0
- Java_泛型的基本应用
- Java_反射的基本应用
- java_继承的应用
- Java_泛型的继承
- Java_基础—泛型概述和基本使用
- java_基本数据类型的包装类
- java_基本正则表达式
- java_类泛型基本实例
- JAVA_基本LDAP操作
- Java_基本数据类型
- 黑马程序员--泛型的基本应用
- Java_泛型的理解与等价实现
- java_方法泛型使用
- JAVA_创建泛型对象
- 泛型的基本应用、内部原理及更深应用
- Java_乔晓松_Servlet--ServletContext的总结以及应用实例
- 我不知道的java_泛类型
- JAVA_基本LDAP操作实例
- TCP的连接和终止(TCP/IP详解)
- YSlow团队的23条“Web性能最佳实践和规则”
- 查找练习 hash——出现过的数字
- ios 判断是qq,银行卡,手机号等等公用的方法。
- zookeeper个人理解
- Java_泛型的基本应用
- Qt中model/view设计模式
- WIN7 完全卸载oracle11g步骤
- 动态分配数组
- MySQL数据库服务器逐渐变慢 该如何分析与解决
- Python 里的I/O文件操作
- 公司绝不会告诉你的10大秘密
- virsh常用命令
- (十四) 套接字 - select