java基础之泛型

目录

一:概念

二: 格式

三:好处

四:泛型类

1:概念

2:例子

五:泛型方法

1:概念

2:注意

六:泛型接口

七:泛型高级(通配符)

1:任意类型

2:? extends E 向下限定,E及其子类

3:? super E 向上限定,E及其父类


一:概念

把明确数据类型的工作提前到编译时期,在创建对象的时候明确。这种有点像把类型

当作参数进行传递,所以泛型还有另外一种叫法:参数化类型。

二: 格式

<数据类型>

注意:这里的数据类型只能是引用数据类型

三:好处

1、将运行时期的问题提前到编译时期

2、避免了强制类型转化

3、优化了代码程序,消除不必要的黄色警告线

自动装箱 JDK1.5之后出现的(就是传入int型或者字符型数据会自动转成对应的引用数据类型)

四:泛型类

1:概念

泛型类:把泛型定义在类上面

格式:public class 类名 <泛型类型1,…>

这里的<>里面的内容仅仅表示的是一种参数类型,参数类型是一种变量,既然是一种变量

就符合我们的命名规则,可以是任意符合标识符起名规则的名字。

2:例子

Class LinkedList<E>

Class ArrayList<E>

其中E就是泛型类型可以是任意引用类型,在创建对象时如果指定了类型的话就只能添加指定类型的数据

package day27;

import java.util.ArrayList;

public class Test11 {
    public static void main(String[] args) {
        ArrayList<String> s= new ArrayList<String>();
//创建一个ArrayList对象指定他的泛型为字符串
        s.add("hello");
        s.add("java");
//添加其他元素会编译出错
        s.add(1);

    }
}
/*Error:(10, 10) java: 对于add(int), 找不到合适的方法
    方法 java.util.Collection.add(java.lang.String)不适用
      (参数不匹配; int无法转换为java.lang.String)
    方法 java.util.List.add(java.lang.String)不适用
      (参数不匹配; int无法转换为java.lang.String)
    方法 java.util.AbstractCollection.add(java.lang.String)不适用
      (参数不匹配; int无法转换为java.lang.String)
    方法 java.util.AbstractList.add(java.lang.String)不适用
      (参数不匹配; int无法转换为java.lang.String)
    方法 java.util.ArrayList.add(java.lang.String)不适用
      (参数不匹配; int无法转换为java.lang.String)
*/

五:泛型方法

1:概念

把泛型定义在方法上

格式:public 返回类型 方法名<泛型类型 .>

2:注意

//但是有个问题。没有一定要规定方法传入的参数类型要和类的类型要一致

//如果我们的类上面没有泛型的话,方法还能不能随便传参呢?

(可以,没有要求方法用泛型类也要)

当指定泛型以后只能传入指定的类型数据

六:泛型接口

把泛型定义在接口上

格式:public interface 接口名

七:泛型高级(通配符)

1:任意类型

泛型通配符<?> 任意类型,如果没有明确,那么就是Object以及任意的Java类了

例如:ArrayList<?> objects1 = new ArrayList<Animals>();

2:? extends E 向下限定,E及其子类

例如:ArrayList<? extends Animals> objects3 = new ArrayList<Animals>();

            后面可以时Animals以及他的子类

           ArrayList<? extends Object> objects4 = new ArrayList<Animals>();

            后面可以时Object以及他的子类

3:? super E 向上限定,E及其父类

ArrayList<?super Cat> objects5 = new ArrayList<Animals>();

可以是Cat以及Cat的父类

ArrayList<?super Animals> objects6 = new ArrayList<Animals>();

可以时Animals以及其的父类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值