泛型定义
如果想要避免项目之中出现“ClassCastException”最好的方做法是直接回避对象的强制转换,所以JDK1.5之后提供有泛型技术,而泛型的本质在于:类中的属性或方法的参数与返回值的类型可以由对象实例化的时候动态决定。
那么此时就需要在类定义的时候明确的定义占位符(泛型标记)。
范例:
class Point <T> //T是type的简写,可以定义多个泛型
{
//定义xy坐标
private T x;
private T y;
//传参给私有变量
public void setX(T x){
this.x = x;
}
public void setY(T y){
this.y = y;
}
//返回参数
public T getX(){
return this.x;
}
public T getY(){
return this.y;
}
}
此时Point类中的x与y属性的数据类型并不确定,而是由外部来决定。
提示:关于默认的泛型类型
泛型是属于JDK1.5以后的产物,由于在这之前已经有不少内置的程序类或者接口广泛的应用在项目开发之中,于是为了保证这些类或接口追加了泛型之后,原始的程序类依然可以使用,所以如果不设置泛型类型时,自动使用Object作为类型,以保证程序的正常运行,但是在编译的过程之中会出现警告信息。
泛型定义完成后可以在实例化对象的时候进行泛型的设置,一旦设置之后,里面的x与y的属性类型就与当前对象直接绑定了。
范例:
class JavaDemo
{
public static void main(String[] args)
{
Point<Integer> point = new Point<Integer>();
//第一步:根据需求进行内容的设置
point.setX(10);
point.setY("北纬20度");
//第二步:从里面获取数据,拆箱
int x = point.getX();
int y = point.getY();
System.out.println("x坐标:"+x+"\ty坐标:"+y);
}
}
class Point <T> //T是type的简写,可以定义多个泛型
{
//定义xy坐标
private T x;
private T y;
//传参给私有变量
public void setX(T x){
this.x = x;
}
public void setY(T y){
this.y = y;
}
//返回参数
public T getX(){
return this.x;
}
public T getY(){
return this.y;
}
}
结果:
现在的程序之中,由于Point类里面的泛型类型为Integer,所以所有对应此泛型的属性、变量、方法返回值将全部替换为Integer(只局限于此对象之中),这样在进行处理的时候发现设置的内容有错误,则会在程序编译的时候自动进行错误提示,同时也避免了对象的向下转型处理,避免安全隐患。(此时的输入的字符串信息在编译之中就能报出错误,修正以后即可正常运行,不会编译完成后再到程序异常。)
泛型的使用注意事项:
- 泛型之中值允许设置引用类型,如果现在要操作基本类型必须使用包装类;
-从JDK1.7开始,泛型对象实例化对象可以简化为
Point point = new Point<>();- 使用泛型可以解决大部分的类对象强制转换处理,这样的程序才是一个合理的设计。
版权声明:本文为weixin_46245201原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。