您的位置:首页 > 职场人生

黑马程序员-泛型理解

2015-06-15 14:18 417 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
出现原因:JDK1.5版本以后出现的新特性,用于解决安全问题,是一个安全机制

好处:

1.将运行时出现的ClassCastException,转移到了编译时期,就是为了方便我们解决问题,让程序运行时出现的问题减少,

2.重要的是:避免的强制类型转换的麻烦

泛型的格式 (通常在集合框架里面用得比较多一点)

用一个<>当中包含一个我们指定的数据类。如ArrayList<String>

<>就是用来接收数据类型,就类比函数传参数,

注意:只能传递引用数据类型

java用到的泛型对象我们可以到API文档中具体查看;

什么时候定义泛型呢?

当我们类当中我们要操作的数据类型不确定的时候。

早期我们定义一个Object来完成扩展

现在定义泛型来扩展

泛型类定义的泛型,在整个类中就有效,如果类当中的方法被调用,那么泛型类被定义

明确要操作的对象以后,那么我们所要操作的类型也就固定了。如何解决这个问题呢?

答:为了让不同的方法可以操纵不同的类型,而去我们的类型还不确定,那么我们可以把泛型定义咋

方法上面,

public <T> void Show(T tt);//泛型方法的定义方式

public static <T> void method( M mm); //泛型的静态方法

特殊之处:静态方法不可以访问类上定义的泛型,

Java能够定义泛型类。我们能不能自己定义呢?
package com.text;

public class zhulang
{

/**
*自己定义的泛型类。
* @param args
*/
public static void main(String[] args)
{
//泛型类明确了存储的内容只能在里面存储不同的对象
Mygenerosity<Tool> my = new Mygenerosity<Tool>();

my.setObject(new Tool());
Tool t = (Tool)my.getObject();

//调用泛型方法
my.Show("泛型方法");
//调用静态的方法
Mygenerosity.method("静态方法");
}
}

class Tool
{
@Override
public int hashCode()
{
// TODO Auto-generated method stub
return 88;
}
}
/**
* 自己定义一个泛型
* @param <ZZ>
*/
class Mygenerosity<ZZ>
{
private ZZ zz;

public void setObject(ZZ zz)
{
this.zz = zz;
}
public ZZ getObject()
{
return this.zz;
}

public static <M> void method(M mm)
{
System.err.println("泛型的静态方法");
}
//泛型方法
public <T> void Show(T t)
{
System.out.println("Shwo:泛型方法"+t);
}
public <Q> void print(Q q)
{
System.out.println("print:泛型方法"+q);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: