泛型是从jdk1.5之后追加到java语言里面的
作用:主要目的是为了解决ClassCastException的问题
在进行对象的向下转型时永远都可能存在安全隐患,而java希望通过泛型慢慢解决掉此类问题。
Object造成泛型产生的主要依据
Java泛型(Generic) 的引入加强了参数类型的安全性,减少了类型的转换,它与C++中的模板(Temeplates) 比较类似,但是有一点不同的是:Java的泛型在编译器有效,在运行期被删除,也就是说所有的泛型参数类型在编译后会被清除掉
例子:
现在假设定义一个描述x与y坐标的处理类,并且允许开发者保存三类数据:
整型数据:x=10、y=20;
浮点型数据:x=10.1、y=20.9;
字符串型数据:x=东经120度、北纬30度。
于是在设计Point类的时候就需要考虑具体x和y属性的类型,这个类型要求可以保存以上三种数据
我们利用Object类来进行定义;因为存在有如下的转型关系:
整型数据:基本数据类型-》包装为Integer类对象-》自动向上转型为Object
浮点型数据:基本数据类型-》包装为Double类对象-》自动向上转型为Object
字符串数据:String 类对象-》自动向上转型为Object
Object范围广,向下转型有安全隐患
------------------------------------------------------------------------------
最好的做法是直接回避掉对象的强制转换,所以在jdk1.5之后提供有泛型的技术,而泛型的本质在于,类中的属性或方法的参数与返回值的类型可以由对象实例化的时候动态决定。
那么此时就需要在类定义的时候明确定义占位符(泛型标记)
使用者定义你是整型,你就存整型
使用者定义你是字符串,你就存字符串
--------------------------------------------------------------------------------
现在程序中,由于Point类里面设置的泛型类型为Integer,这样所有的对应此泛型的属性、变量、方法返回值就将
全部替换成Integer(只局限于此对象之中),这样在进行处理的时候如果发现设置的内容有错误,则会在程序编译的时候自动进行错误提示,同时也避免了对象向下转型处理
没有向下转型就可以避免安全隐患。
------------------------------------------------------------------------------
泛型注意点:1、泛型之中只允许设置引用类型,如果现在要操作基本类型必须是使用包装类;
2、从jdk1.7开始,泛型对象实例化可以简化为“Point<Integer> point=new Point<>()”;
---------------------------------------------------------------------------------
使用泛型可以解决大部分的类对象的强制转换处理,这样的程序才是一个合理的设计