欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

黑马程序员_泛型,黑马程序员

来源: javaer 分享于  点击 11464 次 点评:30

黑马程序员_泛型,黑马程序员


----------- android培训java培训、java学习型技术博客、期待与您交流! ------------

 

同过对集合可以存储任何类型的对象,但是当把一个对象存入集合后,集合会“忘记”这个对象的
类型,Java中引入了“参数化类型(paramenterized type)”这个概念,泛型。它可以限定方法
操作的数据类型,在定义集合类时:使用“<参数化类型>”的方式指定该类中方法操作的数据类型
ArrayList<参数化类型>list=new ArrayList<参数化类型>();
自定义泛型:
用于缓存程序中的某个值,此时在这个容器类中势必要定义两个方法save()和get(),一个用于
保存数据,另一个用于取出数据,这两个方法的定义如下:
void   save(){....}
返回值  参数类型 get(){....}
为了能保存任意类型的对象,save()方法的参数需要定义为object类型,同样get()方法的返回值
也需要是object类型,但是当使用get()方法取出这个值得时候,有可能忘记当初存储的是什么类型
的值,在取出时将其转换为String类型,这样程序就会发生错误。

class Cachepool{
 Object temp;
 public void save(Object temp){
  this.temp=temp;
 }
 public Object get(){

 return temp;
 }
}
public class Example{
 public static void main(String[] args){

  Cachpool pool=new Cachepool();// 创建Cachepool对象
  pool.save(new Integer(1));//存入数据
  String temp=pool.get();//取出数据
  System.out.println(temp);
 }


}
从运行结果可以看出,程序在编译时就报错,就是因为在代码第13行处存入了一个Integer类型
的数据,在代码第14行处取出这个数据时,将该数据转换了String类型,出现了类型不匹配的错误。
为了避免这个问题,就可以使用泛型。如果在定义一个类CachePool时使用<T>声明参数类型(T其实就是
Type的缩写,这里也可以使用其他字符,为了方便理解都定义为T),将save()方法的参数类型和
get()方法的返回值类型的元素,在取出元素时就无须进行类型转换。

class cachePool<T>{
 T temp;
 public void save(T temp){
  this.temp=temp;
 }
 public T get(){
  return temp;
 }
}
public class Example26{
 public static void main(String[] args){
 cachePool<Integer>pool=new cachePool<Integer>();
 pool.save(new Interger(1));
 Integer temp=pool.get();
 System.out.println(temp);
 }
}


在定义CachePool类时,声明了参数类型为T,在实例化对象时通过<Integer>将参数T指定为Interger
类型,同时在调用save()方法时传入的数据也是Interger类型,那么调用get()方法取出的数据
自然就是Integer类型,这样做的好处是不需要进行类型转换。

 

----------- android培训java培训、java学习型技术博客、期待与您交流! ------------

 

相关文章

    暂无相关文章
相关栏目:

用户点评