Java泛型

目录

一、什么是泛型

二、引出泛型

三、泛型的语法

 四、泛型类的使用

 五、泛型的上界

5.1、语法

 5.2、示例

 六、泛型方法


一、什么是泛型

泛型是在JDK1.5引入的新的语法,通俗讲,泛型就是适用于许多许多类型。从代码上讲,泛型就是对类型实现了参数化。

二、引出泛型

我们不妨设想一下,是否存在这样一个类,类中包含一个数组成员,使得数组中可以存放任何类型的数据,也可以根据成员方法返回数组中某个下标的值? 通过我们以前学过的数组的有关知识,我们知道:数组只能存放指定类型的元素。但我们又知道所有类的父类,默认为Object类。那么数组是否可以创建为Object?我们可以编写以下代码:

public class Main {
    public static void main1(String[] args) {
        MyArray myarray=new MyArray();
        myarray.setVal(0,13);
        myarray.setVal(1,"hello");
        String str=myarray.getPos(1);//编译报错
        System.out.println(str);
    }
}

通过上述代码,我们可以知道:该方法可以存放任意数据类型,但同时我们也发现1下标是字符串,但用String接收时会报错。我们进行如下改动后发现:可以将1下标进行强制类型转换来解决报错问题。

public class Main {
    public static void main(String[] args) {
        MyArray myarray=new MyArray();
        myarray.setVal(0,13);
        myarray.setVal(1,"hello");
        String str=(String)myarray.getPos(1);
        System.out.println(str);
    }
}

结果如下:

 虽然在这种情况下,当前数组任何数据都可以存放,但是,更多情况下,我们还是希望它只能够持有一种数据类型。而不是同时持有多种类型。所以,泛型的主要目的就是指定当前的容器,要持有什么类型的对象。让编译器去做检查。此时,就需要把类型,作为参数传递。需要什么类型,就传入什么类型。

三、泛型的语法

class 泛型类名称<类型形参列表> {
    // 这里可以使用类型参数
}
或
class 泛型类名称<类型形参列表> extends 继承类/* 这里可以使用类型参数 */ {
    // 这里可以使用类型参数
}

注意:类名后的代表占位符,表示当前类是一个泛型类

 四、泛型类的使用

泛型类<类型实参> 变量名=new 泛型类<类型实参>(构造方法实参); // 实例化一个泛型类对象

例如:

Alg<Student> alg=new Alg<Student>();

注意:泛型只能接受类,所有的基本数据类型必须使用包装类!(上述类型实参之所以省略,是因为当编译器可以根据上下文推导出类型实参时,可以省略类型实参的填写 ) 

 五、泛型的上界

在定义泛型类时,有时需要对传入的类型变量做一定的约束,可以通过类型边界来约束。

5.1、语法

class 泛型类名称<类型形参 extends 类型边界>{
   ......
}

 5.2、示例

public class MyArray<E extends Number>{
    .......
}

只接受 Number 的子类型作为 E 的类型实参 。 

 六、泛型方法

6.1、语法

方法限定符 <类型形参列表> 返回值类型 方法名称(形参列表) { ... }

6.2、示例(交换数组中两元素的值)

public class Utit{
   public static <E>void swap(E[] array,int i,int j){
     E t=array[i];
     array[i]=array[j];
     array[j]=t;
   }
}

 本篇完.......

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值