返回

Java 泛型

发布时间:2022-11-15 02:30:48 267
# java# java# 数据

(目录)

一、说明

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

二、理解

Java 泛型

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

泛型类

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

泛型接口

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

有界的类型参数

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

泛型标记符

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

类型通配符

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

三、实现

1.泛型类

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

public class genericity {
    public static class Box {

        private T t;

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

        public T get() {
            return t;
        }

        public static void main(String[] args) {
            Box integerBox = new Box();
            Box stringBox = new Box();
            
            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 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 name = new ArrayList();
        List age = new ArrayList();
        List number = new ArrayList();

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

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

在这里插入图片描述

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线