Java泛型(一)

1.前言

一般的类和方法,只能使用具体的类型;要么是基本类型,要么是自定义的类。如果要编写可以应用于多种类型的代码,这种刻板的限制对代码的束缚就会很大。

在面向对象编程语言中,多态算是一种泛化机制

可有的时候,多态对程序的约束还是太强了。因为一旦指明了接口,他就要求代码必须实现。

正因为多态并不是很好的解决问题,,JavaSE5引入了泛型的概念

有很多原因促成泛型的出现,而最引人注目的一个原因,就是为了创造容器类


我们先来看看一个只能持有单个对象的类。

class Automobile {}

public class Holder1 {
private Automobile a;
public Holder1(Automobile a){this.a = a;}
Automobile get() {return a;}
}

这个类十分正常,没啥毛病,但是仔细一想,这个类的重用性十分的差,它无法持有其他类型的任何对象,如果是要求可重用性的代码,那这种写法是灾难性的。

在JavaSE5之前我们可以让这个直接持有Object类型的对象

public class Holder2{
private Object a;
public Holder2(Object a){this.a = a;}
public void set(Object a){this.a = a;}
public Object get(){return a;}
public static void main(String[] args){
Holder2 h2 = new Holder2(new Automobile());
Automobile a = (Automobile)h2.get();
h2.set("hahahaha");
String s = (String)h2.get();
}
}

现在是不是能存储各种类型了。

但是,有些情况下,我们确实希望容器能够存储多种类型。但是通常而言,我们会使用容器来存储一种类型的对象。泛型的主要目的就是用来指定容器要持有什么类型的对象,而且由编译器来保证类型的正确性。

因此,与其使用Object,我们还不如使用泛型,等到使用的时候再决定类型.

public class Holder3<T>{
private T a;
public Holder3(T a){this.a = a}
public void set(T a){this.a = a}
public T get(){return a;}
public static void main(String[] args){
Holder3<Automobile> h3 = new Holder3<Automobile>(new Automobile());
Automobile a = h3.get();
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值