Java 泛型介绍和使用
java 的泛型是 JDK 1.5 以后出现的安全机制
public static void main(){
ArrayList al = new ArrayList();
//ArrayList<String> al2 = new ArrayList<String>();
al.add("abc1");
al.add("abc2");
al.add(4);
Iterator it = al.iterator();
//Iterator<String> it = al.iterator();
while(it.hasNext()){
String str = (String)it.next();//强转数值类型的会有问题
//String str = it.next();
System.out.println(str);
}
}
泛型出现的好处
1、将运行时的问题 ClassCastException 转到了编译时期
2、避免了强制转换的麻烦
泛型技术是给编译器使用的技术,用于编译时期。确保类型的安全,运行是,会将泛型去掉,生成的class文件中是不带泛型的,这个称为泛型的擦除(为了兼容运行的类加载器)
泛型什么时候使用
当操作的引用数据类型不确定的时候,就用 <>
。将要操作的引用数据类型传入即可 其实 <>
就是一个用于接受具体引用数据类型的参数范围。
在程序中,只要用到了带有 <>
的类或者接口,就要明确传入的具体引用数据类型
泛型接口
将泛型定义在接口上
interface Inter<T>{
public void show(T t);
}
class Intermpl implements Inter<String>{
public void show(String str){
}
}
class Intermpl1<Q> implements Inter<Q>{
public void show(Q q){
}
}
泛型限定-上限
一般在存储元素的时候都是用上限,因为这样取出都是按照上限类型来运算的。不会出现类型安全隐患。 泛型的通配符:?(未知类型)。
public static void main(String[] args){
ArrayList<String> al = new ArrayList<String>();
al.add("abc1");
al.add("abc2");
ArrayList<Integer> al2 = new ArrayList<Integer>();
al.add(1);
al.add(2);
printCollection(al);
printCollection(al2);
}
public static void printCollection(Collection<String> al){
Iterator<String> it = al.iterator();
while(it.hasNext()){
String str = it.next();
System.out.println(str);
}
}
修改如下:
public static void printCollection(Collection<?> al){
Iterator<?> it = al.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
还可以对类型进行限定:? extends E(接受E类型或者E的子类型对象)->上限:
public static void printCollection(Collection<? extends Person> al){
Iterator<? extends Person> it = al.iterator();
}
泛型限定-下限
通常对集合中的元素进行取出操作时,可以是用下限。
public static void printCollection(Collection<?> al){}
等价于:
public static void printCollection(Collection<? extends Object> al){}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
不错