Fork me on GitHub

java学习----泛型

目录

  1.泛型的定义

  2.泛型的使用

 3.泛型通配符

 

一、泛型的定义

  泛型是java5的新特性,使用泛型会让程序编写简单安全,在编译的时候就会检查类型是否安全

  定义:所谓泛型就是允许在定义类、接口和方法使用参数类型这个类型形参可以在声明变量、

创建对象、调用方法时动态指定(类型实参)泛型的参数类型只能是引用类型,不能是基本类型

  

二、泛型的使用

  1.泛型接口

    泛型接口格式:

      修饰符interface接口名<T...>{}

      泛型接口Demo

public interface Action<E> {
    //在接口中使用泛型E
    E getE();
    //在接口中使用泛型抽象方法
    <T> T getT(int i);
}

 

  2.泛型类

 

    泛型类格式:

      修饰符class类名<T...>{

      使用T; }    

        泛型类Demo

复制代码
//类上声明泛型E
public class ActionImpl<E>{
    //声明E类型变量
    private E e;
    //使用E类型
    public E getE() {
        // TODO Auto-generated method stub
        return e;
    }
    public ActionImpl(E e){
        this.e = e ;
    }
    
}
复制代码

 

  3.泛型方法

    泛型方法格式:

      修饰符<T...>返回值 方法名(参数列表){

        使用T; }

        泛型方法Demo

public class GenericWay {
    //方法上声明泛型T类型
    public static <T> T get(T t){
        return t;
    }
}

 

三、泛型通配符

  泛型通配符的符号是?

  普通的泛型与泛型通配符的泛型Class<T>Class<?>的区别在于:

  Class<T> :在实例化的时候,T需要替换成具体的类型
  在泛型类、方法中可以使用T,还可以操作T类型的变量

  Class<?>:他是通配符,?可以表示任何类型(使用了泛型)

  泛型通配符可以匹配任意类型。

  泛型通配符Demo

  

复制代码
import java.util.ArrayList;
import java.util.List;

public class GWC {
    //参数是list,list里的类型可以是任意类型
    public void forList(List<?> l){
        for (Object object : l) {
            System.out.println(object);
        }
    } 
    public static void main(String[] args) {
        GWC gwc = new GWC();
        List<Integer> l1 = new ArrayList<>();
        l1.add(1);
        l1.add(2);
        gwc.forList(l1);
        List<String> l2 = new ArrayList<>();
        l2.add("1");
        l2.add("2");
        gwc.forList(l2);
    }
}
复制代码

    通配符上限

     举个栗子:

        List<? extends Number>这么声明的数只能是number类型或number类型的子类

      通配符上限Demo:

        

复制代码
import java.util.ArrayList;
import java.util.List;

public class GWCTop {
    public void forList(List<? extends Number> l){
        for (Number number : l) {
            System.out.println(number);
        }
    }
    
    public static void main(String[] args) {
        GWCTop gwcTop = new GWCTop();
        //Object 类型是number类型的父类编译报错;
        //List<Object> list = new ArrayList<>();
        //String 类型不是number编译器报错;
        //List<String> list = new ArrayList<>();
        List<Number> list = new ArrayList<>();
        gwcTop.forList(list);
    }
}
复制代码

 

    通配符下限

      举个栗子:

        List<? super Number>这么声明的数只能是number类型或number类型的父类

        通配符下限Demo

复制代码
import java.util.ArrayList;
import java.util.List;

public class GWCUnder {
    public void forList(List<? super Number> l){
        for (Object object : l) {
            System.out.println(object);
        }
    }
    public static void main(String[] args) {
        GWCUnder gwcUnder = new GWCUnder();
        //Integer 类型是Number类型的父类,编译不通过;
        //List<Integer> list = new ArrayList<>();
        //String 类型不是Number类型的父类,编译不通过;
        //List<String> list = new ArrayList<>();
        List<Object> list = new ArrayList<>();
        gwcUnder.forList(list);
    }
}
复制代码

 

posted @   Banana_Fish  阅读(251)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!
点击右上角即可分享
微信分享提示