MEC@JavaSE@进阶篇@笔记03@泛型总结

一、泛型

1、泛型的作用

泛型可以代表某种引用数据类型,在定义的时候如果不知道该定义什么类型,就可以定义成泛型。

泛型用<>来定义,<>里面需要写一个大写字母来代表定义一个泛型。

泛型作用:约束集合添加数据的类型。

2、类上定义泛型

类上定义泛型格式:

public class 类名<泛型类型>{
    泛型类型 变量名;
}

何时确定类型:

在创建对象的时候确定具体的类型。

代码演示:

/*
    如果一个类中需要一个不确定类型的变量,那么就适合使用泛型类。
    使用泛型类定义的变量,可以在类中任何位置使用。
 */
public class TestClass<T> {
    T t; //定义一个泛型类型的变量
​
    public void method(){
        System.out.println(t);
    }
​
}

package com.itheima.demo03fanxing;
​
public class Test01 {
    public static void main(String[] args) {
        TestClass<String> tc = new TestClass();
        tc.t = "aaa";
​
        tc.method();
    }
}

小节:定义泛型类可以使用类中的成员变量更灵活,而且在创建对象时还能约束类型。

3、方法上定义泛型

方法上定义泛型格式:

public 泛型类型 void method(T t){
    
}

何时确定类型:

在调用方法的时候确定具体类型。

代码演示:

/*
    演示泛型方法
 */
public class TestFanxingFF {
​
    public <T> void method(T t){
        System.out.println(t);
    }
}
​
​
//使用
public class Test01 {
    public static void main(String[] args) {
        TestFanxingFF tf = new TestFanxingFF();
​
        tf.method("aaa");
​
    }
}

4、接口上定义泛型

接口上定义泛型格式:

public class 接口名<T>{
    
}

何时确认类型:

情况一:在实现类上确定具体类型

情况二:在实现类上不确定具体类型,在创建对象时确定具体类型。

代码演示:

//接口
public interface AAA<E> {
    //抽象方法
    void method(E e);
}
​
//情况一
//实现类
public class BBB implements AAA<String> {
    @Override
    public void method(String s) {
​
    }
}
​
//情况二
//实现类
//把接口上的泛型变成类上的泛型
public class CCC<E> implements AAA<E> {
    @Override
    public void method(E e) {
        
    }
}
​
public class Test03 {
    public static void main(String[] args) {
        //创建CCC的对象,确定具体类型
        CCC<String> c = new CCC<>();
        c.method("abc");
    }
}

5、泛型通配符

格式:

泛型通配符是在使用泛型而不是在定义泛型。

<?>             : 可以匹配各种泛型类型[了解]
<? extends A>   : 可以匹配A类型和A类型的子类类型  类型上限
<? super  A>    : 可以匹配A类型和A类型的父类类型  类型下限

示例代码:

import java.util.ArrayList;
​
/*
    泛型通配符
    <?>             : 可以匹配各种泛型类型[了解]
    <? extends A>   : 可以匹配A类型和A类型的子类类型  类型上限
    <? super  A>    : 可以匹配A类型和A类型的父类类型  类型下限
 */
public class TestFanxing {
    public static void main(String[] args) {
        ArrayList<Object> list0 = new ArrayList();
        ArrayList<Animal> list1 = new ArrayList();
        ArrayList<Cat> list2 = new ArrayList();
​
        method1(list0);
        method1(list1);
        method1(list2);
​
        //method2(list0); //报错
        method2(list1);
        method2(list2);
​
​
        method3(list0);
        method3(list1);
        // method3(list2); //报错
​
​
    }
​
    //<?>: 可以匹配各种泛型类型[了解]
    public static void method1(ArrayList<?> list){
​
    }
​
    //<? extends A> : 可以匹配A类型和A类型的子类类型  类型上限
    public static void method2(ArrayList<? extends Animal> list){
​
    }
​
    //<? super  A>  : 可以匹配A类型和A类型的父类类型  类型下限
    public static void method3(ArrayList<? super Animal> list){
​
    }
​
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值