黑马程序员_泛型,黑马程序员
黑马程序员_泛型,黑马程序员
----------- 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学习型技术博客、期待与您交流! ------------
相关文章
- 暂无相关文章
用户点评