Java 泛型

举报
Yeats_Liao 发表于 2022/10/19 23:13:42 2022/10/19
【摘要】 一、说明泛型(generics)本质是参数化类型,所操作的数据类型被指定为一个参数提供编译时类型安全检测机制,允许程序员在编译时检测到非法的类型 二、理解Java 泛型Java中的泛型只在编译阶段有效,不会进入到运行阶段泛型有三种使用方式,泛型类、泛型接口、泛型方法泛型类类型参数声明部分包含一个或多个类型参数,参数间用逗号隔开泛型接口该方法在调用时可以接收不同类型的参数有界的类型参数限制被...

一、说明

  • 泛型(generics)本质是参数化类型,所操作的数据类型被指定为一个参数
  • 提供编译时类型安全检测机制,允许程序员在编译时检测到非法的类型

二、理解

Java 泛型

  • Java中的泛型只在编译阶段有效,不会进入到运行阶段
  • 泛型有三种使用方式,泛型类、泛型接口、泛型方法

泛型类

  • 类型参数声明部分包含一个或多个类型参数,参数间用逗号隔开

泛型接口

  • 该方法在调用时可以接收不同类型的参数

有界的类型参数

  • 限制被允许传递到一个类型参数的类型种类范围
  • 声明一个有界的类型参数,首先列出类型参数的名称,后跟 extends 关键字,最后紧跟它的上界

泛型标记符

  • E - Element (在集合中使用,因为集合中存放的是元素)
  • T - Type(Java 类)
  • K - Key(键)
  • V - Value(值)
  • N - Number(数值类型)
  • ? - 表示不确定的 java 类型

类型通配符

  • 一般使用 ? 代替具体的类型参数
  • <? extends T>表示该通配符所代表的类型是T类型的子类
  • <? super T>表示该通配符所代表的类型是T类型的父类

三、实现

1.泛型类

创建genericity类,实现写入和读取数据

public class genericity {
    public static class Box<T> {

        private T t;

        public void add(T t) {
            this.t = t;
        }

        public T get() {
            return t;
        }

        public static void main(String[] args) {
            Box<Integer> integerBox = new Box<Integer>();
            Box<String> stringBox = new Box<String>();
            
            integerBox.add(17);
            stringBox.add(new String("Hello World"));

            System.out.printf("Integer Value :%d\n", integerBox.get());
            System.out.printf("String Value :%s\n", stringBox.get());
        }
    }
}

在这里插入图片描述

2.泛型方法

创建genericity类,比较三个值并返回最大值

public class genericity {
    public static <T extends Comparable<T>> T maximum(T x, T y, T z){
        T max = x;
        if (y.compareTo(max) > 0){
            max = y;
        }
        if (z.compareTo(max) > 0){
            max = z;
        }
        return max;
    }

    public static void main(String[] args) {
        System.out.printf( "Max of %d, %d and %d is %d\n",
                13, 14, 17, maximum( 13, 14, 17 ) );

        System.out.printf( "Maxm of %.1f,%.1f and %.1f is %.1f\n",
                5.5, 2.2, 7.7, maximum( 5.5, 2.2, 7.7 ) );

        System.out.printf( "Max of %s, %s and %s is %s\n",
                "Shea", "Good", "Yeats", maximum( "Shea", "Good", "Yeats" ) );
    }
}

在这里插入图片描述

3.类型通配符

public class genericity {

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

    public static void main(String[] args) {
        List<String> name = new ArrayList<String>();
        List<Integer> age = new ArrayList<Integer>();
        List<Number> number = new ArrayList<Number>();

        name.add("Yeats");
        age.add(17);
        number.add(17.17);

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

在这里插入图片描述

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。