java中的泛型

如果一个类里只接受整数类型,那么无法加入浮点类型;如果用object类对象取代整数类型,那么编译器就要正常判断当前对象实际是哪一种类型,这会很浪费时间。如果用某个未指定的类型T取代整数类型,实际使用时再加入具体类型,那么就可以处理多种类型的对象。例如:
public class Store<T> {
private T t;
public void put(T t){
    this.t=t;
}
public T get(){
    return t;
}

}
在store类中,加入了一个参数化类型T,意味着成员变量t的类型未定,因此该程序通用性好。当使用这个类时,用具体的类型取代T就行了,可以用类类型,接口类型和其他引用类型取代T,但不能用基本类型取代。例如,Store意味着t的类型现在是Car,实例化Store类的语法是“Store c1 = new ();”
泛型的应用实例:
class Store {
private T t;
public void put(T t){
this.t=t;
}
public T get(){
return t;
}

}
public class TestStore{
public static void main(String[] args){
Store i1 = new Store();
i1.put(new Integer(3));
Integer i2 = i1.get();
System.out.println(i2);
Store s1 = new Store();
s1.put(new String(“abc”));
String s2 = s1.get();
System.out.println(s2);
}
}
结果:
3
abc
从本例可以看出,Store类用了泛型参数T后,可以用于保存整数型类对象和字符串型对象,提高了复用度。

一、定义泛型类型:
定义泛型类型时用尖括号包含一个单个大写字母代表的类型参数跟在类名后,常用的大写字母及其含义如下:

泛型类型可以有多个类型参数,但每一个参数在该类或接口中是唯一的,如Store<T,U>表明Store里有两个类型参数。接口也可以使用泛型,例如:
public interface Room<T>{
T find();
}
方法本身也可以定义泛型类型,称为泛型方法,比声明整个类为泛型更实用。定义泛型方法时,把尖括号部分放在方法的返回值前,例如:
public<T> void put(T t){
    System.out.println("T:"+t.getClass().getName());
    }
    同理,构造方法也可以定义泛型类型。

二、限界类型参数:
限界类型参数是限定可以取代类型参数的实际类型范围。上节中Store没有限定用什么类型代替T,如果希望只能用水果类型Fruit及其子类取代T,可以用extends Fruit加载T后,例如: public class Store。其中,extends后面的类型是T的上界。限定了可替换的类型范围后,用该范围之外的类型带入就会出现编译错误。
三、通配符:
泛型中所用的通配符用问号?表示,代表某种未知类型,有无界通配符、限界通配符和下界通配符。
无界通配符的形式:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值