Java——泛型

泛型

一、泛型的概念

JDK1.5设计了泛型的概念。泛型即为“类型参数”,这个类型参数在声明它的类、接口或方法中,代表未知的通用的类型。
如果有了泛型并使用泛型,既能保证安全,又能简化代码。
使用泛型类创建对象时, 如果没有明确泛型类型, 默认类型为 Object

二、为什么要使用泛型?

这里拿 集合 举例,比如说我们有一个集合保存学生的信息,现在要打印学生的成绩。

   Collection students = new ArrayList();
   Student swk = new Student("孙悟空", 80);
   Student zbj = new Student("猪八戒", 60);

   students.add(swk);
   students.add(zbj);
   students.add("唐僧");

   // 输出学生的成绩
   for (Object student : students) {
       Student stu  = (Student)student;
       System.out.println(stu.getScore());
   }

编译通过了,但是运行时报错 ClassCastException.。主要原因就是集合保存的是 Object 类型。
而我们需求是只保存学生, 保存其他的类型明显不利于我们对数据的处理,这个时候就可以使用泛型。

使用泛型处理问题
泛型
这时候发现,保存其他类型在编译期间直接就报错了, 这就是泛型的好处。 相当于给这个集合贴了一个标签, 只能保存标签里的数据。并且循环的时候因为泛型指定的Student ,直接使用就可以了。

三、泛型类

泛型类型用于类的定义中,被称为泛型类。通过泛型可以完成对一组类的操作对外开放相同的接口。最典型的就是各种容器类,如:List、Set、Map。

四、泛型接口

泛型接口与泛型类的定义及使用基本相同。泛型接口常被用在各种类的生产器中
实现类实现泛型接口时, 如果没有明确泛型类类型, 这个实现类仍然是泛型类

五、泛型方法

public class MyClass{
	// 泛型方法
	public <T> void test(T t){
	}
}

六、通配符

  • <?> 通配符, 表示任意泛型类型
     List<?> list = null;
     list = new ArrayList<Object>();
     list = new ArrayList<Animal>();
     list = new ArrayList<Cat>;
    
  • <? extends T> 设定通配符上限
     List<?  extends Animal> list = null;
     list = new ArrayList<Object>(); // 编译失败
     list = new ArrayList<Animal>();
     list = new ArrayList<Cat>;
    
  • <? super T> 设定通配符下限
     List<? super Animal> list = null;
     list = new ArrayList<Object>();
     list = new ArrayList<Animal>();
     list = new ArrayList<Cat>; // 编译失败
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值