泛型
1.泛型概述
我们在集合中存储数据的时候,存储了String和Integer俩种类型的数据。而在遍历的时候,我们把它当做是String类型处理,做了转化,所以
会报错。但是呢?它在编译期间却没有告诉我们。所以我们觉得这一个设计的不好。所以集合也模仿着数组中在定义之前指明数据的类型,在
创建对象的时候明确元素的数据类型。这样就不会存在问题了。这一种技术被称为泛型。
2.泛型
是一种把类型明确的工作推迟到创建对象或者调用方法的时候才去明确的特殊类型。参数化类型,把类型当作参数传递.
3.泛型定义数据格式
<数据类型>
注意:这里面的数据类型只能够是引用类型。
4.泛型的好处
(1).把运行时期的问题提前到了编译期间
(2).避免了强制类型转换
(3).优化了程序设计,解决了异常提示
5.泛型使用举例:
public class Test {
public static void main(String[] args) {
List<String> lt=new ArrayList<String>();
lt.add("hello");
lt.add("world");
lt.add("java");
for(int i=0;i<lt.size();i++){
System.out.println(lt.get(i));
}
}
}
//输出结果
hello
world
java
6.泛型类的使用
(1).概述:
把泛型定义在类上。
public class ObjectTool<T>()//这里面的T表示的就是变了的类型,T-->type
(2).代码实现
学生类:
public class Student implements Cloneable{
//学生名字
private String name;
//年龄
private int age;
//无参
public Student(){
}
//带参构造
public Student(int age, String name) {
super();
this.age=age;
this.name=name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
//测试类
public class Test {
public static void main(String[] args) {
List<Student> lt=new ArrayList<Student>();
Student st=new Student(10,"张三");
Student st1=new Student(11,"李四");
Student st2=new Student(12,"王五");
lt.add(st);
lt.add(st1);
lt.add(st2);
for(int i=0;i<lt.size();i++){
System.out.println(lt.get(i).getAge()+"----"+lt.get(i).getName());
}
}
}
//输出结果:
10----张三
11----李四
12----王五
7.泛型接口
(1).所谓的泛型接口就是把泛型定义在接口上。
(2).代码实现
//定义接口
public interface Testfx<T> {
public abstract void show(T t);
}
//定义接口实现类
public class TestfxImpliment<T> implements Testfx<T> {
@Override
public void show(T t) {
// TODO Auto-generated method stub
System.out.println(t);
}
}
//测试类
public class Test {
public static void main(String[] args) {
Testfx<String> tf=new TestfxImpliment<String>();
tf.show("hello");
Testfx<Integer> tf1=new TestfxImpliment<Integer>();
tf1.show(100);
}
}
8.泛型的高级使用(通配符)
(1).通配符使用
?:任意类型,如果没有明确,那么就是Object以及任意的java类了。
?:extends E:向下限定,E以及其子类
?:super E:向上限定,E以及其父类
(2).代码实现
//动物类
public class Animal {
}
//狗类
public class Dog extends Animal{
}
//猫类
public class Cat extends Animal{
}
//测试类
public class Test {
public static void main(String[] args) {
//如果没有明确需要的是什么类型
Collection<Object> c1=new ArrayList<Object>();
Collection<?> c2=new ArrayList<Object>();
Collection<?> c3=new ArrayList<Animal>();
Collection<?> c4=new ArrayList<Dog>();
Collection<?> c5=new ArrayList<Cat>();
//? extends E:向下限定,E以及其子类
Collection<? extends Animal> c6=new ArrayList<Animal>();
Collection<? extends Animal> c7=new ArrayList<Dog>();
Collection<? extends Animal> c8=new ArrayList<Cat>();
//? super E:向上限定 ,E以及父类
Collection<? super Animal> c9=new ArrayList<Animal>();
Collection<? super Animal> c10=new ArrayList<Object>();
}
}
原文地址:https://www.cnblogs.com/nwxayyf/p/9535916.html