IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> java的泛型 -> 正文阅读

[开发测试]java的泛型

一。泛型的作用

用来限制输入数据或者参数的类型

public class test7{

    public static void main(String[] args) {
        List list = new ArrayList();
        list.add("qqyumidi");
        list.add("corn");
        list.add(100);

        for (int i = 0; i < list.size(); i++) {
            String name = (String) list.get(i); // 这里会报错,因为get是string类型的方法,不能用到int类型中
            System.out.println("name:" + name);
        }
    }
}

为了避免这种错误,可以让list只放一种数据类型,在他的入口加以限制。

public class test7{
    public static void main(String[] args) {
        List <String> list = new ArrayList();
//        list.add(100);会发生编译错误,这样就能确保list中只有string类型
            list.add("aa");
        for (int i = 0; i < list.size(); i++) {
            String name = (String) list.get(i);
            System.out.println("name:" + name);
        }
    }
}

?自定义泛型类

就是在定义时并不指明该方法的具体的类型,而是用E来代替,在调用时再给,给了之后,类中的所有出现E的地方都会是那个类型。

package com.reflection;

public class test7 {
    public static void main(String[] args) {
     Boxx<String> boxx1= new Boxx<String>("ss");
        Boxx<Integer> boxx2= new<Integer> Boxx(100);
//     boxx1.setdata(10000);会报错,因为boxX1中的参数T全部是String类型
        System.out.println(boxx1.returndata());
        System.out.println(boxx2.returndata());
    }
}
class Boxx<T> {
    Boxx(T a) {
        this.data = a;
    }
    private T data;
    public T returndata() {
        return data;
    }
    public void setdata(T b) {
        this.data=b;
    }
}

泛型方法的类型通配符

泛型方法就是把泛型作为参数的方法。
这就是个泛型方法,它只接受 map,而且map的key是String类型,value是User类型
 public static void display(Map<String,User> a)
    {
       System.out.println(a);
    }
Number是integer的父类,但是在泛型中不能这么写,下面的例子会报错
public class GenericTest {

    public static void main(String[] args) {

        Box<Number> name = new Box<Number>(99);
        Box<Integer> age = new Box<Integer>(712);

        getData(name);

        //The method getData(Box<Number>) in the type GenericTest is
        //not applicable for the arguments (Box<Integer>)
        getData(age);   // 1

    }

    public static void getData(Box<Number> data){
        System.out.println("data :" + data.getData());
    }

}

所以我想写一个方法,不仅对String参数的该类使用,也能对其他参数的该类使用,就要用到类型通配符,如下

public class GenericTest {

    public static void main(String[] args) {

        Box<String> name = new Box<String>("corn");
        Box<Integer> age = new Box<Integer>(712);
        Box<Number> number = new Box<Number>(314);

        getData(name);
        getData(age);
        getData(number);
    }

    public static void getData(Box<?> data) {
        System.out.println("data :" + data.getData());
    }

}

通配符上限和下限

通配符上限,是为了让函数只能执行某个类型和他的子类,

通配符下线,是为了让函数只能执行某个类型和他的父类

类型通配符上限通过形如Box<? extends Number>形式定义,相对应的,类型通配符下限为Box<? super Number>形式

public class GenericTest {

    public static void main(String[] args) {

        Box<String> name = new Box<String>("corn");
        Box<Integer> age = new Box<Integer>(712);
        Box<Number> number = new Box<Number>(314);

        getData(name);
        getData(age);
        getData(number);

        //getUpperNumberData(name); // 有错误,因为string类型不是number的子类
        getUpperNumberData(age);    // 没问题
        getUpperNumberData(number); // 没问题
    }

    public static void getData(Box<?> data) {
        System.out.println("data :" + data.getData());
    }

    public static void getUpperNumberData(Box<? extends Number> data){
        System.out.println("data :" + data.getData());
    }

}

Java总结篇系列:Java泛型 - HappyCorn - 博客园

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2022-03-11 22:31:18  更:2022-03-11 22:31:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 0:28:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码